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文件中绘制如下模块

界面

实现代码如下

// 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);
}

实现效果
在这里插入图片描述

全部代码见 https://download.csdn.net/download/hyperspace88466/72190342
仅供练习,如有问题请留言~

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 要编译一个视频播放器,首先需要安装Qt 6的开发环境。然后可以按照以下步骤进行操作: 1. 创建一个新的Qt项目,选择桌面应用程序。 2. 在项目中添加Qt Multimedia模块,这个模块包含了视频播放所需的类和函数。 3. 在主窗口中添加一个QMediaPlayer对象,并调用setMedia()函数来设置要播放视频文件路径。 4. 添加一个QVideoWidget对象,这个对象用来显示视频画面。将QVideoWidget对象设置为QMediaPlayer对象的输出设备,可以通过调用setVideoOutput()函数来实现。 5. 添加一些控制按钮,比如播放暂停、停止、快进、快退等,这些按钮通过调用QMediaPlayer对象的相应函数来实现。 6. 编译并运行程序,测试其播放本地视频的功能。 下面是一个示例代码: ```cpp #include <QtWidgets> #include <QtMultimedia> int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget window; QVBoxLayout *layout = new QVBoxLayout(&window); QMediaPlayer *player = new QMediaPlayer; QVideoWidget *videoWidget = new QVideoWidget; player->setVideoOutput(videoWidget); QPushButton *playButton = new QPushButton("Play"); QObject::connect(playButton, &QPushButton::clicked, player, &QMediaPlayer::play); QPushButton *pauseButton = new QPushButton("Pause"); QObject::connect(pauseButton, &QPushButton::clicked, player, &QMediaPlayer::pause); QPushButton *stopButton = new QPushButton("Stop"); QObject::connect(stopButton, &QPushButton::clicked, player, &QMediaPlayer::stop); QHBoxLayout *buttonLayout = new QHBoxLayout; buttonLayout->addWidget(playButton); buttonLayout->addWidget(pauseButton); buttonLayout->addWidget(stopButton); layout->addWidget(videoWidget); layout->addLayout(buttonLayout); player->setMedia(QUrl::fromLocalFile("/path/to/video/file.mp4")); window.show(); return app.exec(); } ``` 注意,本示例中需要将"/path/to/video/file.mp4"替换为你要播放视频文件路径。 ### 回答2: 要编译一个能够播放本地视频Qt6视频播放器,可以按照以下的步骤进行操作: 1. 首先,需要在Qt软件包管理器中安装Qt6的开发工具及相关的多媒体模块。 2. 在Qt Creator中创建一个新的Qt Quick应用程序项目。 3. 在Qt Quick应用程序项目中,添加一个视频播放器的主窗口组件,可以使用Qt Quick Controls来简化界面设计。 4. 为视频播放器主窗口添加一个QMediaPlayer对象,用于管理视频播放。 5. 在QMediaPlayer对象中设置视频源,可以通过选择本地视频文件的方式或者设置文件路径的方式来指定视频源。 6. 在主窗口组件中,添加用于播放控制的按钮,如播放暂停、停止等。 7. 在按钮的点击事件处理函数中,调用对应的QMediaPlayer函数来实现视频播放控制的功能。 8. 可以根据需要,为视频播放器添加额外的功能,如音量控制、视频进度条、全屏播放等。 9. 运行程序,将会出现视频播放器的界面。可以通过点击按钮来控制视频播放暂停和停止。 10. 在程序运行中,如果想要切换不同的本地视频文件进行播放,可以添加一个文件选择对话框,让用户能够选择要播放视频文件。 以上是一个基本的步骤,当然在实际编码过程中还可能会遇到其他具体的问题,需要根据情况进行调试和解决。编译成功后,就可以使用Qt6编译的视频播放器播放本地视频了。 ### 回答3: 要编译一个基于Qt6的视频播放器播放本地视频,你可以按照以下步骤进行: 步骤1:准备工作 首先,确保你已经安装了Qt6开发环境,并且已经配置好了开发环境的路径。你可以从Qt官方网站下载并安装最新的Qt开发环境。 步骤2:创建Qt项目 打开Qt开发环境,点击"新建项目"按钮,选择"应用程序",然后选择"Qt Widgets 应用"。输入项目名称,选择存储位置,并点击"下一步"。 步骤3:设计播放器界面 在Qt设计器中,你可以设计你的播放器界面。可以添加一个视频播放区域、播放按钮、暂停按钮、停止按钮等控件,并为这些控件添加相应的信号和槽。 步骤4:添加视频播放功能 在Qt编程界面,你可以通过使用Qt提供的Multimedia模块来实现视频播放功能。你可以使用QMediaPlayer类来加载和播放本地视频文件。在槽函数中,你可以使用QMediaPlayer的相应函数来控制视频播放暂停和停止。 步骤5:编译和运行 完成上述步骤后,你可以点击Qt开发环境中的"运行"按钮来编译和运行你的项目。你应该能够看到你设计的播放器界面,并且能够播放本地视频文件。 总结: 通过上述步骤,你可以使用Qt6来编译一个视频播放器,用于播放本地视频。你需要在Qt开发环境中创建一个新的项目,设计播放器界面,并使用Qt的Multimedia模块来添加视频播放功能。最后,编译和运行你的项目,就可以播放本地视频了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值