QT5.9实现一个视频播放器播放 暂停进度条

这篇具有很好参考价值的文章主要介绍了QT5.9实现一个视频播放器播放 暂停进度条。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考博主 1https://blog.csdn.net/liji_digital/article/details/83691035
参考博主2https://blog.csdn.net/qq_41071706/article/details/89855986

实现功能

  1. 通过选择按钮选择本地视频文件
  2. 点击播放按钮播放文本框中的文件(不支持其他类型文件的异常检测) 支持mp4 avi等等 如果不支持见参考博主2的内容
  3. 点击暂停按钮,暂停本视频播放,再次点击播放按钮,继续本视频的播放
  4. 进度条跟随视频进度移动
  5. 拖动进度条改变视频播放位置
  6. 视频必须播放之后才能拖动进度条改变播放进度
  7. 不支持快进慢放等操作

1.首先创建一个带ui的project

步骤省略

2.在ui文件中绘制如下模块

QT5.9实现一个视频播放器播放 暂停进度条

实现代码如下

// mainwindow.h


#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QWidget>
#include <QtMultimediaWidgets/QVideoWidget>
#include <QtMultimedia/QtMultimedia>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QVideoWidget    *       m_pPlayerWidget;
    QMediaPlayer    *       m_pPlayer;

public slots:
    void onSetMediaFile();
    void onStartPlayMedia();
    void onChangedPlayerPosition(qint64 pos);
};

#endif // MAINWINDOW_H

// mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtMultimediaWidgets/QVideoWidget>
#include <QtMultimedia/QtMultimedia>
#include <QFileDialog>
#include <QMessageBox>
#include <QException>
#include <QDebug>
#include "player-slider.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    m_pPlayer = new QMediaPlayer;
    m_pPlayerWidget = new QVideoWidget;

    QPalette qplte;
    qplte.setColor(QPalette::Window, QColor(0,0,0));
    m_pPlayerWidget->setPalette(qplte);

    m_pPlayer->setVideoOutput(m_pPlayerWidget);
    ui->verticalLayout->addWidget(m_pPlayerWidget);

    m_pPlayerWidget->setAutoFillBackground(true);
    QObject::connect(ui->pushButton_3,&QPushButton::clicked,this,&MainWindow::onSetMediaFile);
    QObject::connect(ui->pushButton,&QPushButton::clicked,this,&MainWindow::onStartPlayMedia);
    QObject::connect(ui->pushButton_2,&QPushButton::clicked,this->m_pPlayer,&QMediaPlayer::pause);

    QObject::connect(m_pPlayer, &QMediaPlayer::positionChanged, ui->horizontalSlider,&QPlayerSlider::setValue);

    QObject::connect(m_pPlayer, &QMediaPlayer::durationChanged, ui->horizontalSlider,&QPlayerSlider::setDurationPosition);
    QObject::connect(ui->horizontalSlider,&QPlayerSlider::sigProgress,this,&MainWindow::onChangedPlayerPosition);

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::onSetMediaFile()
{
    QFileDialog dialog(this);
    dialog.setFileMode(QFileDialog::AnyFile);
    QStringList fileNames;
    if(dialog.exec())
    {
        fileNames = dialog.selectedFiles();
    }
    if(!fileNames.empty())
    {
        ui->lineEdit->setText(fileNames[0]);
    }
}

void MainWindow::onStartPlayMedia()
{
    qDebug()<<ui->lineEdit->text()<<"\n"<<m_pPlayer->currentMedia().canonicalUrl().path();
    QString filePath = ui->lineEdit->text();
    if(filePath != nullptr && filePath != ""){
        if(m_pPlayer->state() == QMediaPlayer::PausedState &&
           ui->lineEdit->text() == m_pPlayer->currentMedia().canonicalUrl().path().right(m_pPlayer->currentMedia().canonicalUrl().path().length()-1))
        {
            m_pPlayer->play();
        }
        else {
            m_pPlayer->setMedia(QUrl::fromLocalFile(filePath));
            m_pPlayer->play();
        }
    }
    else{
        QMessageBox::critical(this,"警告","请选择要播放的视频文件!");
    }
}

void MainWindow::onChangedPlayerPosition(qint64 pos)
{
    QObject::disconnect(m_pPlayer, &QMediaPlayer::positionChanged, ui->horizontalSlider,&QPlayerSlider::setValue);
    m_pPlayer->setPosition(pos);
    QObject::connect(m_pPlayer, &QMediaPlayer::positionChanged, ui->horizontalSlider,&QPlayerSlider::setValue);

}

// playerslider.h 需要将ui的slider提升为QPlayerSlider类

#ifndef PLAYERSLIDER_H
#define PLAYERSLIDER_H
#include <QSlider>

class QPlayerSlider :public QSlider{
    Q_OBJECT
public:
    QPlayerSlider(QWidget* parent = 0);
public slots:
    void setDurationPosition(qint64 max_len);
signals:
    void sigProgress(qint64 pos);
protected:
    void mouseReleaseEvent(QMouseEvent *e);
    void mousePressEvent(QMouseEvent *e);
    void mouseMoveEvent(QMouseEvent *e);
};


#endif // PLAYERSLIDER_H

// playerslider.cpp

#include "player-slider.h"
#include <QDebug>

QPlayerSlider::QPlayerSlider(QWidget * parent) : QSlider(parent)
{

}

void QPlayerSlider::setDurationPosition(qint64 max_len)
{
    setRange(0,max_len);
}

void QPlayerSlider::mouseReleaseEvent(QMouseEvent *e)
{
    qint64 pos = this->value();
    emit sigProgress(pos);
    QSlider::mouseReleaseEvent(e);
}


void QPlayerSlider::mousePressEvent(QMouseEvent *e)
{
    QSlider::mousePressEvent(e);
}

void QPlayerSlider::mouseMoveEvent(QMouseEvent *e)
{
    QSlider::mouseMoveEvent(e);
}

实现效果
QT5.9实现一个视频播放器播放 暂停进度条

全部代码见 https://download.csdn.net/download/hyperspace88466/72190342
仅供练习,如有问题请留言~文章来源地址https://www.toymoban.com/news/detail-421427.html

到了这里,关于QT5.9实现一个视频播放器播放 暂停进度条的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【OpenCV+Qt】实现简易视频播放器——支持进度条拖动

    OpenCV实现视频播放器,其思路大致就是在线程中使用OpenCV中的VideoCapture循环读取本地视频的每一帧Mat,然后发送到界面转换成QImage进行显示,而进度条拖动则用到了VideoCapture中的set函数,进度条则是使用Qslider;并且通过自定义新的进度条类实现点击跳转功能; 效果: 1.进行

    2023年04月08日
    浏览(54)
  • linux系统中QT里面的视频播放器的实现方法

          大家好,今天主要和大家聊一聊,如何使用QT中视频播放器的方法。   目录 第一:视频播放器基本简介 第二:视频播放器头文件说明  第三:源文件的具体实现方法 第四:运行效果显示        与音乐播放器一样使用 QMediaPlayer 类,不同的是需要使用 setVideoOutput(QVi

    2024年02月04日
    浏览(55)
  • Python—实现本地音乐播放器(添加/播放/暂停/下一首/上一首/音量/打开超链接)

    1.样例 2.分析 1.播放器界面 2.功能 2.1播放器界面 button:添加/播放/暂停/下一首/上一首 Scale:音量条 Label 2.2功能 2.2.1添加音乐,选择文件夹,显示文件夹里.Mp3文件 2.2.2播放音乐,开始播放第一首音乐,按钮由\\\"播放\\\"变为\\\"暂停\\\",点击\\\"暂停\\\",变为\\\"播放\\\",播放显示Playing… 2.2.3下一首,点击

    2024年02月04日
    浏览(48)
  • 微信小程序——实现音乐播放器(上下切换歌曲、进度条拉动、暂停与继续播放)

    小伙伴们你们有没有想过自己搞一个播放器,播上自己喜欢的歌单,那是多么的惬意啊~ 之前,小编遇到一个项目,语音导览的播放器。其实跟播放歌单一个道理。 但是一看微信开发文档里面的音频API又是那么多,我们该如何选择呢?在这里小编选择了使用wx.createAudioContext

    2024年02月02日
    浏览(62)
  • QT简单的视频播放器

    1.功能 选择路径下的固定视频格式文件播放,对应的音频和视频同步播放 2.新建一个不含UI界面的QT工程 特别注意:QT中的路径名不能含中文   设置一个不含UI界面的工程 取消构建目录 因为要引入视频播放器的模块,我们在pro中引入对应的模块 因为要引入布局格式,所以我们

    2024年02月03日
    浏览(40)
  • 浏览器网页内嵌Qt-C++音视频播放器的实现,支持软硬解码,支持音频,支持录像截图,支持多路播放等,提供源码工程下载

        在浏览器中实现播放RTSP实时视频流,⼤体上有如下⼏个⽅案: ⽅案一:浏览器插件⽅案 ActiveX、NPAPI、PPAPI     ActiveX插件适用于IE浏览器,NPAPI与PPAPI插件适用于谷歌浏览器,不过这些插件都已经不被浏览器所支持。 ⽅案二:先转码再转流⽅案     ⼯作原理是架设一

    2024年01月17日
    浏览(97)
  • 嵌入式Qt 开发一个音乐播放器

    上篇文章:RK3568源码编译与交叉编译环境搭建,进行了OK3568开发板软件开发环境搭建,通过编译RK3568的源码,可以得到Qt开发的交叉编译相关工具。 本篇,就来在搭建好的软件开发中,进行Qt软件的开发测试。由于Qt是支持跨平台的,因此本篇的音乐播放器,先在Windows上编写

    2024年02月02日
    浏览(50)
  • Qt音视频开发41-文件推流(支持网页和播放器播放并切换进度)

    本功能最初也是有一些人提过类似的需求,就是能不能将本地的音视频文件,通过纯Qt程序推流出去,然后用户可以直接在网页上播放,也可以用各种播放器播放,然后还可以任意切换播放进度,其实说白了就是个文件服务器,用户通过网络地址访问以后,告诉对方当前是媒

    2024年02月01日
    浏览(73)
  • 用unity插件AVProVideo制作一个视频播放器

    功能键有:播放/暂停,是否循环播放,音量控制,倍速控制,视频切换,后退前进,显示时间。 将对应内容拖到对应位置即可。 其中视频存放在streamingAssets文件夹中,视频名称存放在一个名为“name”的txt文件中,通过读取name中视频的名称控制上一个,下一个视频的播放。

    2024年02月11日
    浏览(47)
  • 【QT项目:视频播放器——Qt opengl编程】通过shader完成显示yuv

    通过Qt opengl不是为了3D绘制,而是为了将视频绘制起来 使用opengl 可以极大降低yuv转rgb的转换开销 1、为什么用QT的opengl 简单,界面可以自动叠加 void paintGL(); // 具体的绘制写在该函数里 void initializeGL(); // 材质初始化 void resizeGL(int width, int height); // 当窗口发生变化(缩放) QO

    2023年04月09日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包