目录
[1 工程配置](#1 工程配置)
[1.1 创建新工程](#1.1 创建新工程)
[1.2 ui界面配置](#1.2 ui界面配置)
[1.3 .pro配置](#1.3 .pro配置)
[2 代码](#2 代码)
[2.1 main.c代码](#2.1 main.c代码)
[2.2 widget.c](#2.2 widget.c)
[2.3 widget.h](#2.3 widget.h)
本文主要记述了如何使用Qt编写一个简单的视频播放器,整个示例采用Qt自带组件就可以完成。可以实现视频的播放和暂停等功能。
1 工程配置
1.1 创建新工程
如下步骤,创建一个名为13-video_player_demo的工程文件,选择基于QWidget就可以,带上ui文件。
1.2 ui界面配置
界面就有四个组件:垂直布局、三个按钮
1.3 .pro配置
在.pro文件内加入:
cpp
multimedia multimediawidgets
即:
cpp
QT += core gui multimedia multimediawidgets
2 代码
2.1 main.c代码
cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
2.2 widget.c
cpp
#include "widget.h"
#include "ui_widget.h"
#include <QFileInfo>
#include <QFileDialog>
#include <QDir>
#include <QMessageBox>
#include <QVBoxLayout>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
// 创建实例化对象
player = new QMediaPlayer(this);
videoplayer = new QVideoWidget(this);
// 将videoplayer添加到verticalLayout里面,不然将单独开个页面
ui->verticalLayout->addWidget(videoplayer);
// 将videoplayer设置为player的输出
player->setVideoOutput(videoplayer);
// 当视频状态发送变化时触发
connect(player, SIGNAL(stateChanged(QMediaPlayer::State)), SLOT(OnStateChange(QMediaPlayer::State)));
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_btn_Import_clicked()
{
QString strCurrentPath = QDir::homePath();
QString stdDlgTitle = "请选择视频文件";
QString strFilter = "MP4 File(*.mp4);;All File(*.*)";
QString strAllFiles = QFileDialog::getOpenFileName(this, stdDlgTitle,
strCurrentPath,strFilter);
if(strAllFiles.isEmpty()) {
QMessageBox::information(this,"错误","打开视频文件失败,请重新检查",QMessageBox::Yes|QMessageBox::No);
return;
}
QFileInfo fileInfos(strAllFiles);
qDebug() << "File info: " << fileInfos.fileName() << ", path: " << fileInfos.filePath();
player->setMedia(QUrl::fromLocalFile(strAllFiles));
player->play(); // 播放
}
void Widget::on_btn_play_clicked()
{
player->play(); // 播放
}
void Widget::on_btn_pause_clicked()
{
player->pause(); // 停止播放
}
void Widget::OnStateChange(QMediaPlayer::State state)
{
qDebug() << "state change";
//播放器状态变化
bool isPlaying = (state==QMediaPlayer::PlayingState);
ui->btn_play->setEnabled(!isPlaying);
ui->btn_pause->setEnabled(isPlaying);
}
2.3 widget.h
cpp
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QVideoWidget>
#include <QMediaPlayer>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
QVideoWidget *videoplayer;
QMediaPlayer *player;
private slots:
void on_btn_Import_clicked();
void on_btn_play_clicked();
void on_btn_pause_clicked();
void OnStateChange(QMediaPlayer::State state);
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
3 注意
1 有时候需要在Linux系统上下载想要的视频软件
2 直接从windows上拉个文件到Linux上,可能由于编码原因不能播放
可以在Linux上录一段视频
可以进行转码