Qt学习 之 音乐播放器(加载本地视频、播放、暂停、移动滑块)

.pro文件:

#-------------------------------------------------
#
# Project created by QtCreator 2018-07-21T15:46:29
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = QTplayer
TEMPLATE = app

QT += multimedia
QT += multimediawidgets
QT += network

SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

RESOURCES += \
    qtplayer.qrc

DISTFILES += \
    image/openfile.png

1、ui界面布局:
Qt学习 之 音乐播放器(加载本地视频、播放、暂停、移动滑块)_第1张图片
2、.h文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 
#include 

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QMediaPlayer *mediaPlayer;
    void Init();

private slots:
    void play();//播放
    void mediaStateChanged(QMediaPlayer::State state);//播放状态
    void positionChanged(qint64 position);//改变播放位置
    void setPosition(int position);//获取播放位置
    void durationChanged(qint64 duration);//播放长度
    void handleError();//播放异常的抛出

    void on_toolButton_clicked();
    void on_horizontalSlider_sliderMoved(int position);
    void on_toolButton_2_clicked();
};

#endif // MAINWINDOW_H

3、.cpp文件:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
#include
#include
#include

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    Init();
}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::Init()
{
    //创建mediaPlayer
    mediaPlayer = new QMediaPlayer(this);
    //设置mediaPlayer的QVideoWidget播放窗口
    mediaPlayer->setVideoOutput(ui->widget);


    ui->widget->setAutoFillBackground(true);
    QPalette qplte;
    qplte.setColor(QPalette::Window, QColor(0,0,0));
    ui->widget->setPalette(qplte);

    //设置播放属性
    //1 监听信号变化函数
    connect(mediaPlayer,SIGNAL(stateChanged(QMediaPlayer::State)),this,SLOT(mediaStateChanged(QMediaPlayer::State)));
    //2 播放进度信号变化函数
    connect(mediaPlayer,SIGNAL(positionChanged(qint64)),this,SLOT(positionChanged(qint64)));
    //3 播放长度信号变化
    connect(mediaPlayer,SIGNAL(durationChanged(qint64)),this,SLOT(durationChanged(qint64)));
    //4 设置播放错误关联
    connect(mediaPlayer,SIGNAL(error(QMediaPlayer::Error)),this,SLOT(handleError()));
    


    //设置播放按钮
    ui->toolButton->setToolTip(QString::fromLocal8Bit("播放"));//设置鼠标点上去提示
    ui->toolButton->setIconSize(QSize(75,75));

    //设置打开文件按钮
    ui->toolButton_2->setToolTip(QString::fromLocal8Bit("打开文件"));
    ui->toolButton_2->setAutoRaise(true);//设置自动获取状态
    ui->toolButton_2->setIconSize(QSize(75,75));

    QHBoxLayout *hlayout = new QHBoxLayout(this);
    hlayout->addWidget(ui->toolButton);
    hlayout->addWidget(ui->horizontalSlider);
    hlayout->addWidget(ui->toolButton_2);
}

void MainWindow::play()
{
    switch (mediaPlayer->state()) {
    case QMediaPlayer::PlayingState:
        mediaPlayer->pause();
        break;
    default:
        mediaPlayer->play();
        break;
    }
}

void MainWindow::on_toolButton_clicked()
{
    play();
}
void MainWindow::mediaStateChanged(QMediaPlayer::State state)
{
    //mediaPlayer播放过程中动态调整播放进度
    switch (state) {
    case QMediaPlayer::PlayingState:
        ui->toolButton->setToolTip(QString::fromLocal8Bit("暂停"));
        break;
    default:
        ui->toolButton->setToolTip(QString::fromLocal8Bit("播放"));
        break;
    }

}
void MainWindow::positionChanged(qint64 position)
{
    //改变播放位置
    ui->horizontalSlider->setValue(position);

}
void MainWindow::setPosition(int position)
{
    //获取mediaPlayer进度条调整位置
    mediaPlayer->setPosition(position);

}
void MainWindow::durationChanged(qint64 duration)
{
    //获取进度条的范围
    ui->horizontalSlider->setRange(0,duration);

}

void MainWindow::on_horizontalSlider_sliderMoved(int position)
{
    setPosition(position);
}
void MainWindow::handleError()
{
    ui->toolButton->setEnabled(false);
}

void MainWindow::on_toolButton_2_clicked()
{
    QString filename = QFileDialog::getOpenFileName(this,QString::fromLocal8Bit("打开视频"),"G:/",tr("*.wmv *.avi"));
    //设置播放内容
    mediaPlayer->setMedia(QUrl::fromLocalFile(filename));
    ui->toolButton->setAutoRaise(true);
}

结果显示:
Qt学习 之 音乐播放器(加载本地视频、播放、暂停、移动滑块)_第2张图片
Qt学习 之 音乐播放器(加载本地视频、播放、暂停、移动滑块)_第3张图片

PS:附上自己下载的链接:链接中有图片,我给删除了
https://download.csdn.net/download/weixin_41822958/10557334

你可能感兴趣的:(Qt学习)