第一:视频播放器基本简介
与音乐播放器一样使用QMediaPlayer 类,不同的是需要使用 setVideoOutput(QVideoWidget*) 设置一个视频输出窗口,好让视频在此窗口显示,其他步骤基本都一样。
调用视频播放器的功能,需要在工程文件.pro文件的第一行添加代码如下:
QT += core gui multimedia multimediawidgets
第二:视频播放器头文件说明
1 #ifndef MAINWINDOW_H 2 #define MAINWINDOW_H 3 4 #include <QMainWindow> 5 #include <QMediaPlayer> 6 #include <QMediaPlaylist> 7 #include <QPushButton> 8 #include <QSlider> 9 #include <QVBoxLayout> 10 #include <QHBoxLayout> 11 #include <QListWidget> 12 #include <QLabel> 13 #include <QSpacerItem> 14 #include <QVideoWidget> 15 #include <QDebug> 16 17 /* 媒体信息结构体 */ 18 struct MediaObjectInfo { 19 /* 用于保存视频文件名 */ 20 QString fileName; 21 /* 用于保存视频文件路径 */ 22 QString filePath; 23 }; 24 25 class MainWindow : public QMainWindow 26 { 27 Q_OBJECT 28 29 public: 30 MainWindow(QWidget *parent = nullptr); 31 ~MainWindow(); 32 33 private: 34 /* 媒体播放器,用于播放视频 */ 35 QMediaPlayer *videoPlayer; 36 37 /* 媒体列表 */ 38 QMediaPlaylist *mediaPlaylist; 39 40 /* 视频显示窗口 */ 41 QVideoWidget *videoWidget; 42 43 /* 视频列表 */ 44 QListWidget *listWidget; 45 46 /* 播放进度条 */ 47 QSlider *durationSlider; 48 49 /* 音量条 */ 50 QSlider *volumeSlider; 51 52 /* 视频播放器按钮 */ 53 QPushButton *pushButton[5]; 54 55 /* 水平布局 */ 56 QHBoxLayout *hBoxLayout[3]; 57 58 /* 水平容器 */ 59 QWidget *hWidget[3]; 60 61 /* 标签文本 */ 62 QLabel *label[2]; 63 64 /* 垂直容器 */ 65 QWidget *vWidget[2]; 66 67 /* 垂直界面 */ 68 QVBoxLayout *vBoxLayout[2]; 69 70 /* 视频布局函数 */ 71 void videoLayout(); 72 73 /* 主窗体大小重设大小函数重写 */ 74 void resizeEvent(QResizeEvent *event); 75 76 /* 媒体信息存储 */ 77 QVector<MediaObjectInfo> mediaObjectInfo; 78 79 /* 扫描本地视频文件 */ 80 void scanVideoFiles(); 81 82 /* 媒体初始化 */ 83 void mediaPlayerInit(); 84 private slots: 85 /* 播放按钮点击 */ 86 void btn_play_clicked(); 87 88 /* 下一个视频按钮点击 */ 89 void btn_next_clicked(); 90 91 /* 音量加 */ 92 void btn_volmeup_clicked(); 93 94 /* 音量减 */ 95 void btn_volmedown_clicked(); 96 97 /* 全屏 */ 98 void btn_fullscreen_clicked(); 99 100 /* 媒体状态改变 */ 101 void mediaPlayerStateChanged(QMediaPlayer::State); 102 103 /* 列表单击 */ 104 void listWidgetCliked(QListWidgetItem*); 105 106 /* 媒体列表项改变 */ 107 void mediaPlaylistCurrentIndexChanged(int); 108 109 /* 媒体总长度改变 */ 110 void musicPlayerDurationChanged(qint64); 111 112 /* 媒体播放位置改变 */ 113 void mediaPlayerPositionChanged(qint64); 114 115 /* 播放进度条松开 */ 116 void durationSliderReleased(); 117 118 /* 音量条松开 */ 119 void volumeSliderReleased(); 120 }; 121 #endif // MAINWINDOW_H
第三:源文件的具体实现方法
1 #include "mainwindow.h" 2 #include <QCoreApplication> 3 #include <QFileInfoList> 4 #include <QDir> 5 6 MainWindow::MainWindow(QWidget *parent) 7 : QMainWindow(parent) 8 { 9 /* 视频播放器布局初始化 */ 10 videoLayout(); 11 12 /* 媒体初始化 */ 13 mediaPlayerInit(); 14 15 /* 扫描本地视频 */ 16 scanVideoFiles(); 17 18 /* 设置按钮的属性 */ 19 pushButton[0]->setCheckable(true); 20 pushButton[4]->setCheckable(true); 21 22 /* 按钮连接信号槽 */ 23 connect(pushButton[0], SIGNAL(clicked()), 24 this, SLOT(btn_play_clicked())); 25 connect(pushButton[1], SIGNAL(clicked()), 26 this, SLOT(btn_next_clicked())); 27 connect(pushButton[2], SIGNAL(clicked()), 28 this, SLOT(btn_volmedown_clicked())); 29 connect(pushButton[3], SIGNAL(clicked()), 30 this, SLOT(btn_volmeup_clicked())); 31 connect(pushButton[4], SIGNAL(clicked()), 32 this, SLOT(btn_fullscreen_clicked())); }
分析:与上一小节音乐播放器的一样,在构造函数里布局初始化,然后执行扫描本地视频文件。
之后就是一些信号槽的连接,基本上就是这么一个流程了。
第四:运行效果显示
将视频文件video放到可执行程序的同级目录下即可。