linux系统中QT里面的视频播放器的实现方法

简介: linux系统中QT里面的视频播放器的实现方法

第一:视频播放器基本简介

      与音乐播放器一样使用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放到可执行程序的同级目录下即可。

 

目录
相关文章
|
21小时前
|
Linux 芯片
一篇文章讲明白Linux下控制GPIO的三种方法
一篇文章讲明白Linux下控制GPIO的三种方法
14 3
|
6天前
|
监控 Linux 数据处理
lslocks:Linux系统中的锁信息查看利器
`lslocks`是Linux工具,用于查看系统上的文件锁信息,帮助诊断进程同步问题。它显示持有锁的进程、锁类型(如POSIX、flock)和状态。通过简洁的输出,用户能识别死锁和资源争用,优化性能。结合其他命令如`grep`和`awk`可增强分析能力。需适当权限运行,定期监控以预防并发访问问题,处理死锁时要谨慎。
|
3天前
|
Linux 数据处理
Linux中的nproc命令:轻松查看系统CPU核心数
`nproc`命令在Linux中用于查看CPU核心数,简洁高效,无参数直接运行。它读取`/proc/cpuinfo`获取信息,适用于资源分配。例如,`nproc`显示核心数,`nproc --all`(非标准选项,可能需结合其他命令)展示更多详情。在脚本中,可将`nproc`输出赋值给变量以适应动态资源管理。使用时注意文件访问权限,检查结果准确性,并结合其他工具如`lscpu`获取更全面硬件信息。
|
6天前
|
监控 Linux 数据处理
探索Linux中的`lsmem`命令:深入了解系统内存布局
`lsmem`是Linux命令,用于显示系统内存布局和大小,帮助管理员和开发者理解内存使用情况。它提供详细输出,包括内存块的大小、范围、类型和关联,支持多种格式展示,如树状图。命令参数如`-h`显示帮助,`-t`以树形展示,`--human-readable`使大小更易读。需root权限运行,常与`free`、`vmstat`等工具结合使用,用于监控和优化内存。注意不同发行版可能存在兼容性差异。
|
7天前
|
存储 安全 Linux
一行代码使Linux系统崩溃?
一行代码使Linux系统崩溃?
13 1
|
5天前
|
关系型数据库 MySQL Linux
Linux系统中Mysql5.7建立远程连接
Linux系统中Mysql5.7建立远程连接
5 0
|
1月前
|
算法 编译器 Linux
【Qt4 部署】ARM系统上使用Qt 4 进行开发的QWS 等环境变量部署
【Qt4 部署】ARM系统上使用Qt 4 进行开发的QWS 等环境变量部署
44 0
|
7天前
|
关系型数据库 MySQL 项目管理
数据库大作业——基于qt开发的图书管理系统(四)项目目录的整理与绘制登录页面
数据库大作业——基于qt开发的图书管理系统(四)项目目录的整理与绘制登录页面
|
7天前
|
SQL 关系型数据库 MySQL
数据库大作业——基于qt开发的图书管理系统(三)Qt连接Mysql数据库
数据库大作业——基于qt开发的图书管理系统(三)Qt连接Mysql数据库
|
7天前
|
SQL 数据可视化 关系型数据库
数据库大作业——基于qt开发的图书管理系统(二) 相关表结构的设计
数据库大作业——基于qt开发的图书管理系统(二) 相关表结构的设计