分享好友 维修知识首页 维修知识分类 切换频道

吉日象官网 www.jirixiang.com

Qt实现视频播放器(附完整源码)

2025-02-226150

以下是一个基于Qt实现的视频播放器的完整源码:

#include <QMediaPlayer>#include <QMediaPlaylist>#include <QVideoWidget>#include <QFileDialog>#include <QVBoxLayout>#include <QHBoxLayout>#include <QPushButton>#include <QSlider>#include <QLabel>#include <QFileIconProvider>#include <QMessageBox>#include <QFileInfo>#include <QDebug>#include <QApplication>class VideoPlayer : public QWidget{Q_OBJECTpublic:VideoPlayer(QWidget *parent = nullptr): QWidget(parent){// 创建媒体播放器和视频展示窗口mediaPlayer = new QMediaPlayer(this);videoWidget = new QVideoWidget(this);mediaPlayer->setVideoOutput(videoWidget);// 创建播放列表playlist = new QMediaPlaylist(this);mediaPlayer->setPlaylist(playlist);// 创建控制按钮playButton = new QPushButton(this);playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));connect(playButton, &QPushButton::clicked, this, &VideoPlayer::togglePlayback);stopButton = new QPushButton(this);stopButton->setIcon(style()->standardIcon(QStyle::SP_MediaStop));connect(stopButton, &QPushButton::clicked, mediaPlayer, &QMediaPlayer::stop);// 创建进度条positionSlider = new QSlider(Qt::Horizontal, this);positionSlider->setRange(0, 0);connect(positionSlider, &QSlider::sliderMoved, this, &VideoPlayer::setPosition);// 创建标签显示视频信息infoLabel = new QLabel(this);infoLabel->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);// 创建布局QVBoxLayout *mainLayout = new QVBoxLayout;QHBoxLayout *controlLayout = new QHBoxLayout;controlLayout->addWidget(playButton);controlLayout->addWidget(stopButton);controlLayout->addWidget(positionSlider);mainLayout->addWidget(videoWidget);mainLayout->addWidget(infoLabel);mainLayout->addLayout(controlLayout);setLayout(mainLayout);}private slots:void openFile(){QStringList fileNames = QFileDialog::getOpenFileNames(this, "选择视频文件", QString(), "视频文件 (*.mp4 *.avi)");if (!fileNames.isEmpty()) {foreach(const QString &fileName, fileNames) {QFileInfo fileInfo(fileName);if (fileInfo.exists() && fileInfo.isFile()) {playlist->addMedia(QUrl::fromLocalFile(fileName));} else {QMessageBox::warning(this, "错误", QString("无法打开文件: %1").arg(fileName));}}mediaPlayer->play();}}void togglePlayback(){if (mediaPlayer->state() == QMediaPlayer::PlayingState) {mediaPlayer->pause();} else {mediaPlayer->play();}}void setPosition(int position){mediaPlayer->setPosition(position);}void updatePosition(qint64 position){positionSlider->setValue(position);}void updateDuration(qint64 duration){positionSlider->setRange(0, duration);}void handleError(){QMessageBox::critical(this, "错误", QString("发生错误: %1").arg(mediaPlayer->errorString()));}private:QMediaPlayer *mediaPlayer;QVideoWidget *videoWidget;QMediaPlaylist *playlist;QPushButton *playButton;QPushButton *stopButton;QSlider *positionSlider;QLabel *infoLabel;};int main(int argc, char *argv[]){QApplication app(argc, argv);VideoPlayer player;player.setWindowTitle("视频播放器");player.resize(640, 480);player.show();return app.exec();}#include "main.moc"

该视频播放器使用了QMediaPlayerQMediaPlaylistQVideoWidget等Qt类来实现视频播放功能。界面上有一个视频展示窗口、播放按钮、停止按钮和进度条。用户可以通过点击播放按钮来开始/暂停视频播放,通过点击停止按钮来停止视频播放,通过拖动进度条来调整视频播放位置。

使用方法:

在Qt项目中添加以上源码,例如将其保存为main.cpp

编译并运行项目。

注意:这段代码使用的是Qt 5的C++ API,可能需要根据您的Qt版本进行适当调整。

举报
打赏 0
评论 0
matlab如何求二阶导数
在Matlab中,可以使用diff函数来计算二阶导数。diff函数的基本语法如下:dy = diff(y, n, dim)其中,y是要求导的向量或矩阵,n是

0评论2025-03-15753

mysql怎么防止sql注入
要防止SQL注入,可以采取以下措施:使用参数化查询或预编译语句:通过将用户输入的值作为参数传递给查询语句,而不是将其直接拼

0评论2025-03-15472

java防止sql注入的方式有哪些
Java防止SQL注入的方式有以下几种:使用参数化查询(Prepared Statement):使用PreparedStatement接口来执行SQL语句,通过将参

0评论2025-03-15854

电脑屏幕上出现无信号的原因有哪些
电脑屏幕出现无信号的原因可能有以下几种:电缆连接问题:连接电缆松动、插头不良或者电缆损坏都可能导致屏幕无信号。显卡问题:

0评论2025-03-15259

电脑屏幕黑屏但主机正常如何解决
电脑屏幕黑屏但主机正常的问题可能是由于以下几个原因引起的:显示器连接问题:首先,确定显示器与主机的连接是否正确,检查显示

0评论2025-03-15339

电脑显示ip冲突如何解决
当电脑显示IP冲突时,可以按照以下步骤解决问题:首先,确认是否有其他设备使用了与电脑相同的IP地址。可以通过查看网络中其他设

0评论2025-03-15735

Windows如何看IP是否冲突
可以通过以下步骤来检查Windows系统中的IP地址是否冲突:打开“开始”菜单,然后点击“运行”(或按下Win + R键)。在“运行”对

0评论2025-03-15262

怎么从hbase读取数据导入mongodb
要将数据从HBase导入MongoDB,可以使用以下步骤:首先,连接到HBase并查询要导出的数据。可以使用Java编程语言或HBase Shell执行

0评论2025-03-15692

mongodb分片集群生产环境怎么配置
要配置MongoDB分片集群的生产环境,您需要执行以下步骤:设计分片策略:确定如何划分数据片段和选择分片键。分片键是用于将数据

0评论2025-03-15718

php防止sql注入的方法有哪些
使用预处理语句和绑定参数:使用PDO或mysqli扩展来执行SQL查询,使用预处理语句和绑定参数的方式来防止SQL注入。预处理语句可以

0评论2025-03-15888

关于我们  |  网站留言
(c)2025 吉日象官网m.jirixiang.com
赣ICP备2021007278号