QT实现视频播放,包含开始、暂停、停止按钮和进度条、总时长、播放进度.cpp
时间: 2023-09-27 15:05:48 浏览: 387
QT 视频播放器
4星 · 用户满意度95%
下面是一个简单的QT视频播放器的实现,包含开始、暂停、停止按钮和进度条、总时长、播放进度等功能。需要注意的是,这里使用了QMediaPlayer和QVideoWidget,所以需要在.pro文件中添加multimedia模块的支持。
```cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QMessageBox>
#include <QMediaMetaData>
#include <QMediaPlaylist>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 创建媒体播放器和视频控件
player = new QMediaPlayer(this);
videoWidget = new QVideoWidget(this);
player->setVideoOutput(videoWidget);
// 设置界面布局
ui->verticalLayout->addWidget(videoWidget);
ui->horizontalSlider->setRange(0, 0); // 默认禁用进度条
ui->horizontalSlider->setEnabled(false);
// 连接信号和槽
connect(player, &QMediaPlayer::durationChanged, this, &MainWindow::on_durationChanged);
connect(player, &QMediaPlayer::positionChanged, this, &MainWindow::on_positionChanged);
connect(ui->horizontalSlider, &QSlider::sliderMoved, this, &MainWindow::on_sliderMoved);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_actionOpen_triggered()
{
// 打开视频文件
QString fileName = QFileDialog::getOpenFileName(this, tr("Open Video File"),
".", tr("Video Files (*.mp4 *.avi *.wmv)"));
if (fileName.isEmpty())
return;
player->setMedia(QUrl::fromLocalFile(fileName));
// 显示总时长
qint64 duration = player->duration();
int secs = duration / 1000;
QString time = QString("%1:%2").arg(secs / 60, 2, 10, QLatin1Char('0'))
.arg(secs % 60, 2, 10, QLatin1Char('0'));
ui->labelDuration->setText(time);
// 启用进度条
ui->horizontalSlider->setRange(0, secs);
ui->horizontalSlider->setEnabled(true);
// 播放视频
player->play();
}
void MainWindow::on_actionPlay_triggered()
{
player->play();
}
void MainWindow::on_actionPause_triggered()
{
player->pause();
}
void MainWindow::on_actionStop_triggered()
{
player->stop();
}
void MainWindow::on_durationChanged(qint64 duration)
{
// 显示总时长
int secs = duration / 1000;
QString time = QString("%1:%2").arg(secs / 60, 2, 10, QLatin1Char('0'))
.arg(secs % 60, 2, 10, QLatin1Char('0'));
ui->labelDuration->setText(time);
// 更新进度条范围
ui->horizontalSlider->setRange(0, secs);
}
void MainWindow::on_positionChanged(qint64 position)
{
// 显示播放进度
int secs = position / 1000;
QString time = QString("%1:%2").arg(secs / 60, 2, 10, QLatin1Char('0'))
.arg(secs % 60, 2, 10, QLatin1Char('0'));
ui->labelPosition->setText(time);
// 更新进度条位置
ui->horizontalSlider->setValue(secs);
}
void MainWindow::on_sliderMoved(int value)
{
// 跳转到指定位置
player->setPosition(value * 1000);
}
```
在界面中添加开始、暂停、停止按钮和进度条、总时长、播放进度的控件,并在相应的槽函数中调用QMediaPlayer的相关函数实现视频播放的功能。需要注意的是,界面布局中需要添加一个QVideoWidget来显示视频内容。
阅读全文