QT任务016:视频播放

您所在的位置:网站首页 黑苹果免驱网卡推荐 QT任务016:视频播放

QT任务016:视频播放

2024-07-12 12:31:49| 来源: 网络整理| 查看: 265

一 任务描述

1、qt界面中实现视频的播放 2、视频界面分为可操作和不可操作的 不可操作是指,自动播放,只能看不能关闭和停止的,没有操作按钮 可操作是指可以调整音量,调整播放进度条,甚至可以点击全屏播放的功能

二 实现过程

1. 配置工程 QT += multimedia //使用多媒体模块 QT += multimediawidgets//使用QVideoWidget视频显示组件

视频显示组件有2种:QVideoWidget 和QGraphicsVideoItem, 或者继承这两个类,自定义显示组件

2.创建2个类MainWindow 和 QmyVideoWidget,以及对应的.cpp文件

1.MainWindow类基于QMainWindow

2.QmyVideoWidget类基于QVideoWidget

①创建C++类

②写类名QmyVideoWidget / 基类QVideoWidget / 包含QWidget

③对.h 文件修改

    a.加上 头文件 #include

    b.加上宏 Q_OBJECT

    c.修改QmyVideoWidget() 为 QmyVideoWidget(QWidget *parent = Q_NULLPTR)

④ 对.cpp文件修改

QmyVideoWidget::QmyVideoWidget() 改为 QmyVideoWidget::QmyVideoWidget(QWidget *parent) : QVideoWidget(parent)

3.绘制UI界面

PS 1:红色禁止的标志  因为没用布局

PS 2:QmyVideoWidget是   添加QWidget组件,右键提升的

PS 3:按钮的图标,直接在ui界面设置

PS 4:布局!!!用好,全屏和退出全屏的时候,没退出,都是布局问题!

4.写主窗口 .h 文件

①槽函数

a.【自动生成 】按钮点击——clicked()+滑动条滑动值变化——valueChanged()

b.【自定义】文件总时长DurationChanged(qint64 duration)函数  和 当前位置时长函数 void PositionChanged(qint64 position)

设置进度条 和 时长标签

②私有变量:视频播放player指针 + 总时长字符串 + 当前时长字符串

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_pushBtn_open_clicked(); void on_pushBtn_voise_clicked(); void on_pushButton_3_clicked(); void on_horizontalSlider_valueChanged(int value); void on_horizontalSlider_2_valueChanged(int value); //自定义槽函数 void Init();//初始化 void DurationChanged(qint64 duration);//文件播放总时长 连接 总时长函数 void PositionChanged(qint64 position);//文件当前播放位置时长 连接 位置函数 private: Ui::MainWindow *ui;\ QMediaPlayer *player;//视频播放器 QString durationTime;//总时长 QString positionTime;//当前位置时长 }; #endif // MAINWINDOW_H 5.写mainwindow .cpp文件

PS 1: 初始化的4个方面

PS 2:注意获取当前文件名 QFileInfo fileInfo(aFile);  ui->label->setText(fileInfo.fileName());

QFileInfo 的参考用法:

https://www.jianshu.com/p/5b851186f4b6

https://blog.csdn.net/huyisu/article/details/27550933

#include "mainwindow.h" #include "ui_mainwindow.h" #include void MainWindow::Init() { player = new QMediaPlayer(this); //①实例化 视频播放器 player->setNotifyInterval(1000); //②信息更新周期???? 1秒更新一次 player->setVideoOutput(ui->Videowidget);//③设置视频 的 显示组件 ui->Videowidget->setMediaPlayer(player);//④设置显示组件 的 关联播放器 } MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); Init(); connect(player,SIGNAL(durationChanged(qint64)),this,SLOT(DurationChanged(qint64))); connect(player,SIGNAL(positionChanged(qint64)),this,SLOT(PositionChanged(qint64))); } MainWindow::~MainWindow() { delete ui; } // 文件总播放时长 连接 总时长函数 void MainWindow::DurationChanged(qint64 duration) { //positionChanged(qint64)信号 带了总时长参数 单位ms ui->horizontalSlider_2->setMaximum(duration);//最大数 int secs = duration /1000;//换成 总秒 int mins = secs / 60;//换成分钟的数值 secs = secs %60;//换成剩余秒的数值 durationTime = QString::asprintf("%d:%d",mins,secs); ui->label_2->setText(positionTime+"/"+durationTime); } //文件当前播放位置变化 的时长 连接 位置进度函数 void MainWindow::PositionChanged(qint64 position) { if(ui->horizontalSlider_2->isSliderDown()) //如果正在拖动进度条,退出 return; ui->horizontalSlider_2->setSliderPosition(position);//设置进度条位置 int secs = position /1000;//秒 int mins = secs / 60;//分钟 secs = secs %60;//剩余秒 positionTime = QString::asprintf("%d:%d",mins,secs); ui->label_2->setText(positionTime+"/"+durationTime); } //打开视频文件 找到所在位置 void MainWindow::on_pushBtn_open_clicked() { QString curPath = QDir::homePath();//获取系统当前目录 QString dlgTitle = "选择视频文件";//对话框标题 QString filter = "mp4文件(*.mp4);;wmv文件(*.wmv);;所有文件(*.*)"; QString aFile = QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter); if(aFile.isEmpty()) return; //获取文件名称,并更新 QFileInfo fileInfo(aFile); ui->label->setText(fileInfo.fileName()); //开始播放 player->setMedia(QUrl::fromLocalFile(aFile));//设置好文件 player->play();//开始播放 } //音量滑动条 调节按钮 void MainWindow::on_horizontalSlider_valueChanged(int value) { player->setVolume(value); } //静音按钮 void MainWindow::on_pushBtn_voise_clicked() { bool mute = player->isMuted();//判断静音 isMuted() 是否静音的函数 player->setMuted(!mute);//设置静音注意 中文感叹号 if(mute) ui->pushBtn_voise->setIcon(QIcon(":/new/prefix1/pic/volumn.bmp"));//更新图标 else ui->pushBtn_voise->setIcon(QIcon(":/new/prefix1/pic/mute.bmp")); } //全屏按键 void MainWindow::on_pushButton_3_clicked() { ui->Videowidget->setFullScreen(true); } //播放位置 进度条更新进度 void MainWindow::on_horizontalSlider_2_valueChanged(int value) { player->setPosition(value); } 6.写myVideoWidget .h 文件

①槽函数——【自定义】键盘事件函数 + 设置视频指针函数

②私有变量:视频播放 thePlayer 指针 

#ifndef QMYVIDEOWIDGET_H #define QMYVIDEOWIDGET_H #include #include #include #include class QmyVideoWidget : public QVideoWidget { //Q_OBJECT;加入了Q_OBJECT,才能使用QT中的signal和slot机制,这个不用 public: //explicit QmyVideoWidget(QWidget *parent = nullptr); QmyVideoWidget(QWidget *parent = Q_NULLPTR); void setMediaPlayer(QMediaPlayer *player); protected: void keyPressEvent(QKeyEvent *event); private: QMediaPlayer *thePlayer; }; #endif // QMYVIDEOWIDGET_H  7.写myVideoWidget .cpp文件 #include "qmyvideowidget.h" #include //按键事件,ESC退出全屏状态 void QmyVideoWidget::keyPressEvent(QKeyEvent *event) { if ((event->key() == Qt::Key_Escape)&&(isFullScreen())) { setFullScreen(false); event->accept(); QVideoWidget::keyPressEvent(event); } } QmyVideoWidget::QmyVideoWidget(QWidget *parent): QVideoWidget(parent) { } //设置播放器 void QmyVideoWidget::setMediaPlayer(QMediaPlayer *player) { thePlayer=player; }

【Q】

1.为什么 视频抖动?

2.为啥 有时候打开不了视频?

 

 



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭