Qt5开发视频播放器的项目实践
作者:黄宏哲
Qt对音视频的播放和控制、相机拍摄、收音机等多媒体应用提供了强大的支持,本文主要介绍了Qt5开发视频播放器,具有一定的参考价值,感兴趣的可以了解一下
一、播放器界面UI设计
控件对象名 | 位置(坐标点) | 对象名称 | 组件名称 | 备注 |
---|---|---|---|---|
Widget | (0, 0, 809, 572) | Widget | QWidget | |
label | label | QLabel | 播放窗口 | |
label_2 | label_2 | QLabel | ||
voice_control | voice_control | QSlider | 音量滑动条 | |
btn_open | btn_open | QPushButton | 打开文件按钮 | |
label_4 | label_4 | QLabel | ||
label_ct | label_ct | QLabel | ||
progress_report | progress_report | MySlider | 当前播放进度标签 | |
label_all_time | label_all_time | QLabel | 视频时长标签 | |
btn_ht | btn_ht | QPushButton | 后退按钮 | |
btn_qj | btn_qj | QPushButton | 前进按钮 | |
btn_start | btn_start | QPushButton | 播放按钮 / 暂停按钮 | |
btn_fullshow | btn_fullshow | QPushButton | 全屏播放按钮 | |
label_5 | label_5 | QLabel | 显示播放列表文本 | |
listWidget | listWidget | QListWidget | 播放列表 |
效果图如下
二、播放器基本实现
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QMediaPlayer> //播放器 #include <QVideoWidget> //播放窗口 #include <QMediaPlaylist>//播放列表 #include <QString> #include <QFileDialog>//文件窗口 #include <QDebug> #include <QResizeEvent> #include <QMouseEvent> #include <QKeyEvent> #include <QListWidgetItem> #include <QObject> #include <QAbstractEventDispatcher> #include "globalkeyfilter.h" namespace Ui { class Widget; } class QMediaPlayer; class QMediaPlaylist; class QVideoWidget; class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget* parent = 0); void setget_Alltime(qint64 playtime);//获取视频时长并设置到标签 void setget_currenttime(qint64 playtime);//获取当时播放位置并设置 void settimeslider(qint64 playtime);//设置进度条 void exitFullScreen(); // 退出全屏 void togglePlayback(); // 暂停/播放 ~Widget(); private slots: void on_btn_open_clicked();//打开音视频 void on_btn_start_clicked();//播放 void on_voice_control_valueChanged(int value);//控制声音 void on_btn_fullshow_clicked();//全屏显示 void getduration(qint64 playtime); //获取时间改变信号 void getposition(qint64 playtime); //获取当前播放位置 void on_btn_ht_clicked();//上一个音视频 void on_btn_qj_clicked();//下一个音视频 void on_listWidget_doubleClicked(const QModelIndex& index); private: Ui::Widget* ui; QStringList m_strlist; //文件名列表 QMediaPlayer* m_pMediaPlayer; //播放器 QVideoWidget* m_pVideoWidget; //播放窗口 QMediaPlaylist* m_MediaPlaylist; //播放列表 QMediaPlayer::State m_state; //播放状态 int m_hour; //视频总时长 int m_munete; //分钟 int m_second; //秒 bool m_sliderstate; //滑块是否被选中的状态 int m_slider_crtval; //滑块当前值 GlobalKeyFilter* m_globalKeyFilter; // GlobalKeyFilter 类 }; #endif // WIDGET_H
将label组件传入QVideoWidget
作为实例化参数,即可获得播放窗口,并通过QMediaPlayer
调用setVideoOutput
函数,指定为播放器窗口。
三、自定义滑块控件
#ifndef MYSLIDER_H #define MYSLIDER_H #include <QMouseEvent> #include <QSlider> class MySlider : public QSlider { Q_OBJECT public: explicit MySlider(QWidget* parent = nullptr); protected: void mousePressEvent(QMouseEvent* ev); void mouseReleaseEvent(QMouseEvent* ev); signals: void mousepress(int value); void mouserelease(int value); }; #endif // MYSLIDER_H
由于进度条数值和视频时长的单位不统一,需要自定义控件MySlider
,监听键盘事件,发送计算得到的视频时长数据到Widget
类的匿名槽函数中,完成滑动条功能。
四、全局键盘监听事件
创建一个GlobalKeyFilter
类,对widget
类向前声明,实现全局的键盘监听。
#include "globalkeyfilter.h" #include "widget.h" #include <QKeyEvent> #include <Windows.h> GlobalKeyFilter::GlobalKeyFilter(Widget* widget) : m_widget(widget) { qDebug() << "键盘监听事件启动了" << "\n"; } bool GlobalKeyFilter::nativeEventFilter(const QByteArray& eventType, void* message, long* result) { if (eventType == "windows_generic_MSG") { MSG* msg = static_cast<MSG*>(message); if (msg->message == WM_KEYDOWN) { int key = msg->wParam; // 处理 ESC 键 if (key == VK_ESCAPE) { if (m_widget) { m_widget->exitFullScreen(); } } // 处理空格键 if (key == VK_SPACE) { m_widget->togglePlayback(); } } } // 返回 false 以便继续传递事件 return false; }
到此这篇关于Qt5开发视频播放器的文章就介绍到这了,更多相关Qt5开发视频播放器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!