Qt打造一款属于自己的播放器
1.效果演示
这里只演示了播放和暂停功能。
没有声音是因为视频转成的gif图片。
2.绘制界面
- 拖一个widget容器 容器里放标签 容器中设置网格布局 设置标签居中显示 改标签文本
- 拖一个widget容器 容器里放滚动条 容器中设置水平布局
- 拖一个widget容器 容器里放四个按钮 按钮间放弹簧 设置水平布局
- 整个widget设置网格布局
- 设置滚动条和按钮的widget容器高限定为40
- 改下按钮的文本和按钮的对象名
简单界面如下:
3.组件添加
QT += core gui multimedia multimediawidgets
4.代码
MyWidget.h:
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
#include<QMediaPlayer> //qt的音频播放器
#include<QMediaPlaylist> //播放列表
#include<QVideoWidget> //播放窗口
#include<QFileDialog>
#include<QString>
#include<QStringList>
QT_BEGIN_NAMESPACE
namespace Ui { class MyWidget; }
QT_END_NAMESPACE
class MyWidget : public QWidget
{
Q_OBJECT
protected:
//....窗口重绘事件处理函数..........
virtual void paintEvent(QPaintEvent *event);
public:
MyWidget(QWidget *parent = nullptr);
~MyWidget();
void add_to_playerList(const QStringList&fileNames);
private slots:
void on_btn_open_clicked();//打开
void on_btn_play_clicked();//播放
void on_btn_pause_clicked();//暂停
void on_btn_stop_clicked();//停止
void on_horizontalSlider_valueChanged(int value);//音量
private:
Ui::MyWidget *ui;
bool flag;
QMediaPlayer *pMediaPlayer; //播放器对象
QMediaPlaylist *pMediaPlayerList; //播放窗口对象
QVideoWidget *pVideoWidget; //播放队列对象
QString fileName;
QMediaPlayer::State playState;//播放的状态
};
#endif // MYWIDGET_H
MyWidget.cpp:
#include "MyWidget.h"
#include "ui_MyWidget.h"
#include<QList>
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::MyWidget)
{
ui->setupUi(this);
QString str=QString("皮蛋牌播放器");
setWindowTitle(str);
flag =false;//暂停标记
//1.创建3个对象
pMediaPlayer=new QMediaPlayer;
pMediaPlayerList=new QMediaPlaylist;
pVideoWidget=new QVideoWidget(this);
//2.给播放器指定播放的队列
pMediaPlayer->setPlaylist(pMediaPlayerList);
//3.给播放器指定播放窗口
pMediaPlayer->setVideoOutput(pVideoWidget);
ui->horizontalSlider->setValue(pMediaPlayer->volume());
}
MyWidget::~MyWidget()
{
delete ui;
}
//...播放器窗口对象尺寸也应该不断随着窗口改变而改变....
void MyWidget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
pVideoWidget->resize(ui->label->size());
pVideoWidget->move(20,0);
}
//...把需要播放的音视频文件路径放到文件队列中去..
void MyWidget::add_to_playerList(const QStringList &fileNames)
{
foreach(QString const& v,fileNames)
{
//QMediaContent mediaContent(v);
QUrl url(v);
pMediaPlayerList->addMedia(url);
}
}
//打开
void MyWidget::on_btn_open_clicked()
{
//1.打开要播放的音视频文件
QStringList fileNames=QFileDialog::getOpenFileNames(this,
"打开要播放的音视频文件","E:\\",
"ALLFiles(*.*);;MP3(*.mp3);;"
"MP4(*.mp4);;AVI(*.avi)");
//2.文件放到播放队列中去
add_to_playerList(fileNames);
//3.设置播放窗口的大小
pVideoWidget->resize(ui->label->size());
pVideoWidget->move(20,0);
}
//播放
void MyWidget::on_btn_play_clicked()
{
playState=QMediaPlayer::PlayingState;
pMediaPlayer->play();
}
//暂停
void MyWidget::on_btn_pause_clicked()
{
flag=!flag;
if(flag){
playState=QMediaPlayer::PausedState;
pMediaPlayer->pause();
}else{
on_btn_play_clicked();
}
}
//停止
void MyWidget::on_btn_stop_clicked()
{
playState=QMediaPlayer::StoppedState;
pMediaPlayer->stop();
}
//音量
void MyWidget::on_horizontalSlider_valueChanged(int value)
{
pMediaPlayer->setVolume(value);
}