Qt打造一款属于自己的播放器

Qt打造一款属于自己的播放器

1.效果演示

这里只演示了播放和暂停功能。
没有声音是因为视频转成的gif图片。
Qt打造一款属于自己的播放器

2.绘制界面

  1. 拖一个widget容器 容器里放标签 容器中设置网格布局 设置标签居中显示 改标签文本
  2. 拖一个widget容器 容器里放滚动条 容器中设置水平布局
  3. 拖一个widget容器 容器里放四个按钮 按钮间放弹簧 设置水平布局
  4. 整个widget设置网格布局
  5. 设置滚动条和按钮的widget容器高限定为40
  6. 改下按钮的文本和按钮的对象名

简单界面如下:
Qt打造一款属于自己的播放器

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

}

上一篇:【Java设计模式】用 披萨订购案例 详细讲解三种工厂模式


下一篇:CF979A Pizza, Pizza, Pizza!!! 题解