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放到可执行程序的同级目录下即可。

 

目录
相关文章
|
6天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
25 3
|
6天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
19 2
|
6天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
24 3
|
9天前
|
安全 Linux 数据安全/隐私保护
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。本文介绍了使用 `ls -l` 和 `stat` 命令查找文件所有者的基本方法,以及通过文件路径、通配符和结合其他命令的高级技巧。还提供了实际案例分析和注意事项,帮助读者更好地掌握这一操作。
26 6
|
9天前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
36 6
|
10天前
|
机器学习/深度学习 自然语言处理 Linux
Linux 中的机器学习:Whisper——自动语音识别系统
本文介绍了先进的自动语音识别系统 Whisper 在 Linux 环境中的应用。Whisper 基于深度学习和神经网络技术,支持多语言识别,具有高准确性和实时处理能力。文章详细讲解了在 Linux 中安装、配置和使用 Whisper 的步骤,以及其在语音助手、语音识别软件等领域的应用场景。
40 5
|
10天前
|
监控 网络协议 算法
Linux内核优化:提升系统性能与稳定性的策略####
本文深入探讨了Linux操作系统内核的优化策略,旨在通过一系列技术手段和最佳实践,显著提升系统的性能、响应速度及稳定性。文章首先概述了Linux内核的核心组件及其在系统中的作用,随后详细阐述了内存管理、进程调度、文件系统优化、网络栈调整及并发控制等关键领域的优化方法。通过实际案例分析,展示了这些优化措施如何有效减少延迟、提高吞吐量,并增强系统的整体健壮性。最终,文章强调了持续监控、定期更新及合理配置对于维持Linux系统长期高效运行的重要性。 ####
|
6月前
|
缓存 Linux 测试技术
安装【银河麒麟V10】linux系统--并挂载镜像
安装【银河麒麟V10】linux系统--并挂载镜像
1697 0
|
6月前
|
关系型数据库 MySQL Linux
卸载、下载、安装mysql(Linux系统centos7)
卸载、下载、安装mysql(Linux系统centos7)
232 0
|
1月前
|
Linux
手把手教会你安装Linux系统
手把手教会你安装Linux系统