发布时间:2023-07-13 09:00
应项目需要,我之前用ffmpeg合成的视频需要用一个界面播放,思来想去自学QT来做这个工作。
首先我系统是ubuton16.0.4,先安装QT工具,然后直接开发。建议新来的朋友先自学一下QT的LayOut布局设计,使用布局会让你的控件更整齐,而且放在布局里的控件在设计好之后还可以跟着窗口的伸缩而伸缩,十分好用。网上很多将界面布局都用的代码来生成控件,这对QT初学者很不友好,我推荐一篇文章教大家用designer来设计界面,布局设计,十分好用。
先看一下我做的很丑陋的布局
右边是我的工具输入,大家可以不用关心,播放视频主要是在右边,打开按钮可以让你选择视频文件,播放按钮来控制视频的暂停和播放的,视频一打开会有进度时间进度条的显示。大家看代码
//选择视频文件
QString filename = QFileDialog::getOpenFileName(this,tr(\"选择视频文件\"),\"/home/cidi/Documents/gxs/Qt-MediaPlayer/build-MediaPlayer-Desktop_Qt_5_7_0_GCC_64bit-Debug/new_video/\",
tr(\"视频格式(*.avi *.mp4 *.flv *.mkv *.mpeg)\"));
QFile file(filename);
if(!file.open(QIODevice::ReadOnly))
{
QMessageBox::information(NULL, \"Title\", \"Content\", QMessageBox::Ok,
QMessageBox::Ok);
return;
}
if(if_reload)
{//重新加载视频时,重置以下变量
delete layout_video;
delete player;
delete widget;
delete timer;
}
if_reload = true;
//实例化三个全局变量
layout_video = new QVBoxLayout;
player = new QMediaPlayer;
widget = new QVideoWidget;
//设置视频播放区域与Label的边距
layout_video->setMargin(1);
//根据label_player尺寸设置播放区域
widget->resize(ui->label_play_video->size());
layout_video->addWidget(widget);
ui->label_play_video->setLayout(layout_video);
player->setVideoOutput(widget);
//设置播放器
player->setMedia(QUrl::fromLocalFile(filename));
//play_state为true表示播放,false表示暂停
play_state = true;
//ui->pushButton_Volume->setEnabled(true);
ui->horizontalSlider->setEnabled(true);
ui->horizontalSlider->setRange(0,maxValue);
//启用播放/暂停按钮,并将其文本设置为“暂停”
ui->pushButton_Player->setEnabled(true);
ui->pushButton_Player->setText(\"暂停\");
timer = new QTimer();
timer->setInterval(1000);
timer->start();
connect(timer,SIGNAL(timeout()),this,SLOT(onTimerOut()));
connect(player,SIGNAL(durationChanged(qint64)),this,SLOT(setEndTime(qint64)));
//播放器开启
player->play();
这是整个视频播放器的主要代码,比较简单,大家看一下效果图。
整个项目我放在github上了,直接下载下来在QT上编译运行就可以了。https://github.com/CoolMonKKey/Work.git
项目在cutVideo文件夹下,有什么问题可以留言问我噢。