用QT制作本地视频播放器
先创建一个Qwidget工程 在工程里第一行加上QT += core gui multimedia multimediawidgets sql
widget.H文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPushButton>
#include <QMediaPlayer>
#include <QVideoWidget>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QListWidget>
#include <QDir>
#include <QFile>
#include <QFileDialog>
#include <QFileInfo>
#include <QSplitter>
#include <QPalette>
#include <QImage>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QCloseEvent>
#include <QMessageBox>
#include <QListWidgetItem>
#include <QTime>
#include <QSlider>
#include <QDateTime>
#include <QLabel>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget
*parent
= 0);
~Widget();
private slots
:
void closeEvent(QCloseEvent
*event
);
void List_file();
void Play();
void Pause();
void Del_file();
void Move(qint64 position
);
void seekChange(int position
);
private:
QListWidget
*list
;
QMediaPlayer
*player
;
QVideoWidget
*video
;
QSplitter
*splitter
;
QSlider
*Slider
;
QSqlDatabase db
;
QString name_file
;
QString dirname
;
QLabel
*label
;
QPushButton
*bt1
;
QPushButton
*bt2
;
QPushButton
*bt3
;
QPushButton
*bt4
;
QPushButton
*bt5
;
int flag
=0;
};
#endif
widget.cpp代码(main.cpp文件不用修改
#include "widget.h"
Widget
::Widget(QWidget
*parent
)
: QWidget(parent
)
{
this->setWindowTitle("爱奇艺");
this->setWindowIcon(QIcon(":/ico/aqy.bmp"));
this->resize(QSize(700,500));
db
= QSqlDatabase
::addDatabase("QSQLITE");
db
.setDatabaseName("my.db");
db
.open();
QString mlist
= "create table mlist(filename text,path text);";
db
.exec(mlist
);
QHBoxLayout
*hbox_1
= new QHBoxLayout
;
QHBoxLayout
*hbox_2
= new QHBoxLayout
;
QVBoxLayout
*vbox
= new QVBoxLayout
;
list
= new QListWidget(this);
Slider
= new QSlider(Qt
::Horizontal
);
label
= new QLabel(this);
video
= new QVideoWidget(this);
list
->setMaximumWidth(200);
this->setAutoFillBackground(true);
video
->setAutoFillBackground(true);
QPalette palette_1
;
QPalette palette_2
;
palette_1
.setColor(QPalette
::Background
,QColor(0,0,0));
palette_2
.setBrush(QPalette
::Background
,QBrush(QPixmap(":/ico/aqi1.bmp")));
video
->setPalette(palette_2
);
this->setPalette(palette_1
);
player
= new QMediaPlayer(this);
QIcon
ico1(":/ico/china.png");
bt1
= new QPushButton(this);
bt1
->setIcon(ico1
);
bt1
->setIconSize(QSize(50,50));
bt1
->setFlat(true);
bt1
->setToolTip("添加文件");
QIcon
ico2(":/ico/zant.png");
bt2
= new QPushButton(this);
bt2
->setIcon(ico2
);
bt2
->setIconSize(QSize(60,60));
bt2
->setFlat(true);
bt2
->setToolTip("暂停");
QIcon
ico3(":/ico/bo.png");
bt3
= new QPushButton(this);
bt3
->setIcon(ico3
);
bt3
->setIconSize(QSize(80,80));
bt3
->setFlat(true);
bt3
->setToolTip("播放");
QIcon
ico4(":/ico/Trash.png");
bt4
= new QPushButton(this);
bt4
->setIcon(ico4
);
bt4
->setIconSize(QSize(50,50));
bt4
->setFlat(true);
bt4
->setToolTip("删除文件");
hbox_1
->addWidget(list
);
hbox_1
->addWidget(video
);
hbox_2
->addWidget(bt1
);
hbox_2
->addWidget(bt2
);
hbox_2
->addWidget(bt3
);
hbox_2
->addWidget(bt4
);
hbox_2
->addWidget(Slider
);
hbox_2
->addWidget(label
);
vbox
->addLayout(hbox_1
);
vbox
->addLayout(hbox_2
);
this->setLayout(vbox
);
Slider
= new QSlider(Qt
::Horizontal
);
connect(bt1
,SIGNAL(clicked(bool)),this,SLOT(List_file()));
connect(bt2
,SIGNAL(clicked(bool)),this,SLOT(Pause()));
connect(bt3
,SIGNAL(clicked(bool)),this,SLOT(Play()));
connect(bt4
,SIGNAL(clicked(bool)),this,SLOT(Del_file()));
connect(player
,SIGNAL(positionChanged(qint64
)),this,SLOT(updatePosition(qint64
)));
connect(Slider
,SIGNAL(sliderMoved(int)),this,SLOT(seekchange(int)));
QString sql
= "select * from mlist;";
QSqlQuery query
;
if( query
.exec(sql
)){
qDebug()<<"显示列表";
}
else{
qDebug()<<"显示失败";
}
while( query
.next() ){
QString file_name
=QString( query
.value("filename").toString() );
list
->addItem(file_name
);
}
}
void Widget
::List_file()
{
QString dirname
= QFileDialog
::getExistingDirectory();
QDir
dir(dirname
);
QStringList filter
;
filter
<<"*.mp3"<<"*.mp4"<<"*.flv"<<"*.avi";
QList
<QFileInfo
> lst
;
lst
= dir
.entryInfoList(filter
);
for(int i
=0;i
<lst
.size();i
++){
list
->addItem(lst
.at(i
).fileName());
QString name
= lst
.at(i
).fileName();
QString path
= lst
.at(i
).absoluteFilePath();
QString sql
= QString("insert into mlist values('%1','%2');").arg(name
).arg(path
);
qDebug()<<sql
;
QSqlQuery query
;
if( query
.exec(sql
)){
qDebug()<<"插入数据库成功";
}
else{
qDebug()<<"插入数据库失败";
}
}
}
void Widget
::Play()
{
QString filename
;
QListWidgetItem
* item
= list
->currentItem();
name_file
= item
->text();
QString sql
= QString("select * from mlist where filename='%1';").arg(name_file
);
QSqlQuery query
;
if(query
.exec(sql
)){
qDebug()<<"查询成功";
}
else {
qDebug()<<"查询失败";
}
if( query
.next()){
qDebug()<<"登录成功";
filename
= query
.value("path").toString();
}
else{
qDebug()<<"登录失败";
}
player
->setMedia(QUrl
::fromLocalFile(filename
));
qDebug()<<"name:"<<filename
;
player
->setVideoOutput(video
);
video
->show();
player
->play();
}
void Widget
::Del_file()
{
QListWidgetItem
* item
= list
->currentItem();
name_file
= item
->text();
QString sql
= QString("delete from mlist where filename='%1';").arg(name_file
);
QSqlQuery query
;
if(query
.exec(sql
)){
qDebug()<<"删除成功";
}
else {
qDebug()<<"删除失败";
}
delete item
;
}
void Widget
::Pause()
{
if(player
->state()==QMediaPlayer
::PlayingState
)
{
bt2
->setToolTip("暂停");
player
->pause();
}
else
{
bt2
->setToolTip("开始");
player
->play();
}
}
void Widget
::closeEvent(QCloseEvent
*event
)
{
if(QMessageBox
::question(this,tr("Quit"),tr("你确定要退出这个应用吗?"),QMessageBox
::Yes
,QMessageBox
::No
) == QMessageBox
::Yes
){
event
->accept();
}
else {
event
->ignore();
}
}
void Widget
::Move(qint64 position
)
{
this->Slider
->setMaximum(player
->duration()/1000);
this->Slider
->setValue(position
/1000);
qint64 moved
= position
;
QTime
movetime(0,(moved
/60000)%60,(moved
/1000)%60);
this->label
->setText(movetime
.toString("mm:ss"));
}
void Widget
::seekChange(int position
)
{
player
->setPosition(position
*1000);
int moved
= position
*1000;
QTime
movetime(0,(moved
/60000)%60,(moved
/1000)%60);
this->label
->setText(movetime
.toString("mm:ss"));
}
Widget
::~Widget()
{
}
运行成功后的界面
转载请注明原文地址: https://mac.8miu.com/read-508992.html