当前位置:   article > 正文

qt实现视频播放器_qt播放视频

qt播放视频

本篇博客介绍如何利用qMediaPlayer和qvideowidget实现视频文件(avi,mp4….)的播放,并且提供进度显示,还可以通过拖动进度条来变换播放位置。相关代码可以在我的资源里下载”基于qt的视频播放器”

pro文件:

  1. #-------------------------------------------------
  2. #
  3. # Project created by QtCreator 2018-11-02T20:03:58
  4. #
  5. #-------------------------------------------------
  6. QT += core gui multimedia multimediawidgets
  7. greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
  8. TARGET = VideoPlayer
  9. TEMPLATE = app
  10. SOURCES += main.cpp \
  11. videoplayer.cpp \
  12. playerslider.cpp
  13. HEADERS += \
  14. videoplayer.h \
  15. playerslider.h
  16. FORMS += \
  17. videoplayer.ui

学习Qt开发不知道做什么?UP主为大家整理的这些领域都涉及到Qt开发:嵌入式领域、桌面端开发、移动端、微控制器MCU、客户端(游戏、直播等等)、汽车领域行业、 消费类电子设备、医疗领域行业、工业自动化领域等等

Qt框架,GUI应用程序,跨平台开发,信号与槽机制,QML语言,模型视图编程,多线程编程,数据库编程,网络编程,XML解析,JSON解析,图形图像处理,用户界面设计,动画效果,OpenGL,WebKit,嵌入式开发,客户端/服务器应用程序.自定义控件

Qt框架,GUI应用程序,跨平台开发,信号与槽机制,QML语言,模型视图编程,多线程编程,数据库编程,网络编程,XML解析,JSON解析,图形图像处理,用户界面设计,动画效果,OpenGL,WebKit,嵌入式开发,客户端/服务器应用程序.自定义控件QT6,C++语言基础,qt基础编程,qt软件开发,Qt架构设计,qt布局管理器,qt嵌入式开发,qt编程入门,qt数据库编程,qt跨平台框架,QT项目实战,Quick模块,OpenCV,Qt实战,OpenCV教程,QT界面开发,Qt框架,C++数据结构,Qt线程,桌面应用开发,qt桌面应用开发,Socket网络编程,qt开发工程师,qt开发,应用程序开发框架,图形视图框架,数据库编程,Qt开发编程,Qt开发控件,Qt开发工程师,QT开发必备技能栈,qt编码,qt网络编程,qt网络通信,Qt信号,Qt槽机制,qt字符串,qt数据类型,qt容器,qt客户端开发,qt软件工程师,qt页面绘制

main.cpp

  1. #include "videoplayer.h"
  2. #include <QApplication>
  3. int main(int argc, char *argv[])
  4. {
  5. QApplication a(argc, argv);
  6. VideoPlayer w;
  7. w.show();
  8. return a.exec();
  9. }

VideoPlayer是我定义的播放器窗体类。它包括一个QMediaplayer,一个QVideoWidget,一个播放按钮,一个停止按钮,一个载入按钮,和进度条PlayerSlider。VideoPlayer的ui文件外观如图:

这里面的PlayerSlider继承自QSlider,行为定义如下:

  1. #ifndef PLAYERSLIDER_H
  2. #define PLAYERSLIDER_H
  3. #include <QSlider>
  4. #include <QMouseEvent>
  5. class PlayerSlider : public QSlider
  6. {
  7. Q_OBJECT
  8. public:
  9. PlayerSlider(QWidget * parent = 0);
  10. void setProgress(qint64);
  11. signals:
  12. void sigProgress(qint64);
  13. private:
  14. bool m_bPressed;
  15. protected:
  16. void mousePressEvent(QMouseEvent *);
  17. void mouseMoveEvent(QMouseEvent *);
  18. void mouseReleaseEvent(QMouseEvent *);
  19. };
  20. #endif // PLAYERSLIDER_H

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓ 

学习Qt开发不知道做什么?UP主为大家整理的这些领域都涉及到Qt开发:嵌入式领域、桌面端开发、移动端、微控制器MCU、客户端(游戏、直播等等)、汽车领域行业、 消费类电子设备、医疗领域行业、工业自动化领域等等

Qt框架,GUI应用程序,跨平台开发,信号与槽机制,QML语言,模型视图编程,多线程编程,数据库编程,网络编程,XML解析,JSON解析,图形图像处理,用户界面设计,动画效果,OpenGL,WebKit,嵌入式开发,客户端/服务器应用程序.自定义控件

Qt框架,GUI应用程序,跨平台开发,信号与槽机制,QML语言,模型视图编程,多线程编程,数据库编程,网络编程,XML解析,JSON解析,图形图像处理,用户界面设计,动画效果,OpenGL,WebKit,嵌入式开发,客户端/服务器应用程序.自定义控件QT6,C++语言基础,qt基础编程,qt软件开发,Qt架构设计,qt布局管理器,qt嵌入式开发,qt编程入门,qt数据库编程,qt跨平台框架,QT项目实战,Quick模块,OpenCV,Qt实战,OpenCV教程,QT界面开发,Qt框架,C++数据结构,Qt线程,桌面应用开发,qt桌面应用开发,Socket网络编程,qt开发工程师,qt开发,应用程序开发框架,图形视图框架,数据库编程,Qt开发编程,Qt开发控件,Qt开发工程师,QT开发必备技能栈,qt编码,qt网络编程,qt网络通信,Qt信号,Qt槽机制,qt字符串,qt数据类型,qt容器,qt客户端开发,qt软件工程师,qt页面绘制

 

  1. #include "playerslider.h"
  2. PlayerSlider::PlayerSlider(QWidget * parent) : QSlider(parent)
  3. {
  4. m_bPressed = false;
  5. }
  6. void PlayerSlider::mousePressEvent(QMouseEvent *e)
  7. {
  8. m_bPressed = true;
  9. QSlider::mousePressEvent(e);//必须有这句,否则手动不能移动滑块
  10. }
  11. void PlayerSlider::mouseMoveEvent(QMouseEvent *e)
  12. {
  13. QSlider::mouseMoveEvent(e);//必须有这句,否则手动不能移动滑块
  14. }
  15. void PlayerSlider::mouseReleaseEvent(QMouseEvent *e)
  16. {
  17. m_bPressed = false;
  18. qint64 i64Pos = value();
  19. emit sigProgress(i64Pos);
  20. QSlider::mouseReleaseEvent(e);//必须有这句,否则手动不能移动滑块
  21. }
  22. void PlayerSlider::setProgress(qint64 i64Progress)
  23. {
  24. if(!m_bPressed)
  25. setValue(i64Progress);
  26. }

这个类的作用有3个:1)接收QMediaPlaer发来的进度信息,更新进度条;2)当用户操作进度条时,不再让进度条响应QMediaPlaer发来的进度信息;3)当用户完成对进度条的拖动后,向QMediaPlaer发送播放位置更新信息。

学习Qt开发不知道做什么?UP主为大家整理的这些领域都涉及到Qt开发:嵌入式领域、桌面端开发、移动端、微控制器MCU、客户端(游戏、直播等等)、汽车领域行业、 消费类电子设备、医疗领域行业、工业自动化领域等等

Qt框架,GUI应用程序,跨平台开发,信号与槽机制,QML语言,模型视图编程,多线程编程,数据库编程,网络编程,XML解析,JSON解析,图形图像处理,用户界面设计,动画效果,OpenGL,WebKit,嵌入式开发,客户端/服务器应用程序.自定义控件

Qt框架,GUI应用程序,跨平台开发,信号与槽机制,QML语言,模型视图编程,多线程编程,数据库编程,网络编程,XML解析,JSON解析,图形图像处理,用户界面设计,动画效果,OpenGL,WebKit,嵌入式开发,客户端/服务器应用程序.自定义控件QT6,C++语言基础,qt基础编程,qt软件开发,Qt架构设计,qt布局管理器,qt嵌入式开发,qt编程入门,qt数据库编程,qt跨平台框架,QT项目实战,Quick模块,OpenCV,Qt实战,OpenCV教程,QT界面开发,Qt框架,C++数据结构,Qt线程,桌面应用开发,qt桌面应用开发,Socket网络编程,qt开发工程师,qt开发,应用程序开发框架,图形视图框架,数据库编程,Qt开发编程,Qt开发控件,Qt开发工程师,QT开发必备技能栈,qt编码,qt网络编程,qt网络通信,Qt信号,Qt槽机制,qt字符串,qt数据类型,qt容器,qt客户端开发,qt软件工程师,qt页面绘制

 

另一个类是VideoPlayer,行为定义如下:

  1. #include "videoplayer.h"
  2. #include "ui_videoplayer.h"
  3. #include <QFileDialog>
  4. VideoPlayer::VideoPlayer(QWidget *parent) :
  5. QWidget(parent),
  6. ui(new Ui::VideoPlayer)
  7. {
  8. ui->setupUi(this);
  9. m_pPlayer = new QMediaPlayer;
  10. m_pPlayerWidget = new QVideoWidget;
  11. m_pPlayer->setVideoOutput(m_pPlayerWidget);
  12. ui->verticalLayout->addWidget(m_pPlayerWidget);
  13. m_pPlayerWidget->setAutoFillBackground(true);
  14. QPalette qplte;
  15. qplte.setColor(QPalette::Window, QColor(0,0,0));
  16. m_pPlayerWidget->setPalette(qplte);
  17. //载入
  18. connect(ui->BtnLoad, SIGNAL(clicked()), this, SLOT(OnSetMediaFile()));
  19. //播放
  20. connect(ui->BtnPlay, SIGNAL(clicked()), m_pPlayer, SLOT(play()));
  21. //停止
  22. connect(ui->BtnStop, SIGNAL(clicked()), m_pPlayer, SLOT(stop()));
  23. connect(m_pPlayer, SIGNAL(stateChanged(QMediaPlayer::State)), this, SLOT(OnStateChanged(QMediaPlayer::State)));
  24. ui->BtnStop->setEnabled(false);
  25. //设置滑块行为
  26. m_bReLoad = true;
  27. ui->slider->setEnabled(false);
  28. connect(m_pPlayer, SIGNAL(positionChanged(qint64)), this, SLOT(OnSlider(qint64)));
  29. connect(m_pPlayer, SIGNAL(durationChanged(qint64)), this, SLOT(OnDurationChanged(qint64)));
  30. connect(ui->slider, SIGNAL(sigProgress(qint64)), m_pPlayer, SLOT(setPosition(qint64)));
  31. }
  32. VideoPlayer::~VideoPlayer()
  33. {
  34. delete m_pPlayer;
  35. delete m_pPlayerWidget;
  36. delete ui;
  37. }
  38. void VideoPlayer::OnSetMediaFile(void)
  39. {
  40. QFileDialog dialog(this);
  41. dialog.setFileMode(QFileDialog::AnyFile);
  42. QStringList fileNames;
  43. if (dialog.exec())
  44. fileNames = dialog.selectedFiles();
  45. if(!fileNames.empty())
  46. {
  47. m_pPlayer->setMedia(QUrl::fromLocalFile(fileNames[0]));
  48. m_bReLoad = true;
  49. ui->slider->setValue(0);
  50. }
  51. }
  52. void VideoPlayer::OnSlider(qint64 i64Pos)
  53. {
  54. ui->slider->setProgress(i64Pos);
  55. }
  56. void VideoPlayer::OnDurationChanged(qint64 i64Duration)
  57. {
  58. if(i64Duration > 0 && m_bReLoad)
  59. {
  60. ui->slider->setRange(0, i64Duration);
  61. m_bReLoad = false;
  62. }
  63. }
  64. void VideoPlayer::OnStateChanged(QMediaPlayer::State enumState)
  65. {
  66. if(QMediaPlayer::StoppedState == enumState)
  67. {
  68. ui->BtnPlay->setEnabled(true);
  69. ui->BtnStop->setEnabled(false);
  70. ui->slider->setEnabled(false);
  71. }
  72. else if(QMediaPlayer::PlayingState == enumState)
  73. {
  74. ui->BtnPlay->setEnabled(false);
  75. ui->BtnStop->setEnabled(true);
  76. ui->slider->setEnabled(true);
  77. }
  78. }

之所以在他的构造函数里设置QPalette,是因为假如不这样,在程序启动时,m_pPlayer不是黑色,而是与背景同样的颜色,显得不好看。

显示效果:

学习Qt开发不知道做什么?UP主为大家整理的这些领域都涉及到Qt开发:嵌入式领域、桌面端开发、移动端、微控制器MCU、客户端(游戏、直播等等)、汽车领域行业、 消费类电子设备、医疗领域行业、工业自动化领域等等

Qt框架,GUI应用程序,跨平台开发,信号与槽机制,QML语言,模型视图编程,多线程编程,数据库编程,网络编程,XML解析,JSON解析,图形图像处理,用户界面设计,动画效果,OpenGL,WebKit,嵌入式开发,客户端/服务器应用程序.自定义控件

Qt框架,GUI应用程序,跨平台开发,信号与槽机制,QML语言,模型视图编程,多线程编程,数据库编程,网络编程,XML解析,JSON解析,图形图像处理,用户界面设计,动画效果,OpenGL,WebKit,嵌入式开发,客户端/服务器应用程序.自定义控件QT6,C++语言基础,qt基础编程,qt软件开发,Qt架构设计,qt布局管理器,qt嵌入式开发,qt编程入门,qt数据库编程,qt跨平台框架,QT项目实战,Quick模块,OpenCV,Qt实战,OpenCV教程,QT界面开发,Qt框架,C++数据结构,Qt线程,桌面应用开发,qt桌面应用开发,Socket网络编程,qt开发工程师,qt开发,应用程序开发框架,图形视图框架,数据库编程,Qt开发编程,Qt开发控件,Qt开发工程师,QT开发必备技能栈,qt编码,qt网络编程,qt网络通信,Qt信号,Qt槽机制,qt字符串,qt数据类型,qt容器,qt客户端开发,qt软件工程师,qt页面绘制

 

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/778560
推荐阅读
相关标签
  

闽ICP备14008679号