應項目需要,我之前用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文件夾下,有什麼問題可以留言問我噢。