QT简易播放器

最近生活有点忙,期末的复习,每天下午还要兼职,学习的时间少了许多,西安的天气还这么热。
先看今天这个播放器项目的运行:

在这里插入图片描述

QTplayer.pro:

#-------------------------------------------------
#
# Project created by QtCreator 2021-04-07T14:10:59
#
#-------------------------------------------------

QT       += core gui multimedia multimediawidgets

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = QTPlayer
TEMPLATE = app

# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0


SOURCES += \
        main.cpp \
        mainwindow.cpp

HEADERS += \
        mainwindow.h

FORMS += \
        mainwindow.ui

RESOURCES += \
    res.qrc

mainwindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QVideoWidget>
#include <QMediaPlayer>
#include <QFileDialog>
#include <QString>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private:
    Ui::MainWindow *ui;
    QMediaPlayer *mediaPlayer;
private slots:
    void play();
    void mediaStateChanged(QMediaPlayer::State state);
    //改变播放位置
    void positionChanged(qint64 position);
    //获取播放位置
    void setPosition(int position);
    //播放长度
    void durationChanged(qint64 position);
    //播放异常的操作
    void handleError();



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

#endif // MAINWINDOW_H

mainwindow.cpp:

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

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //设置主界面背景
//    QPixmap pixmap=QPixmap("C:/Users/zfc/Desktop/QtProject/res/ok.jpg");
//    QPalette palette;
//    palette.setBrush(backgroundRole(),QBrush(pixmap));
//    setPalette(palette);
//
    connect(ui->actionEXIT,&QAction::triggered,[=](){
        this->close();
    });
    //调色板 控件的样式
    QPalette  palette (this->palette());
    palette.setColor(QPalette::Background, Qt::yellow);
    this->setPalette( palette );
    setWindowIcon(QIcon("C:/Users/zfc/Desktop/QtProject/res/Coin0001.png"));
    this->setFixedSize(this->width(),this->height());

    //创建mediaplayer
    mediaPlayer=new QMediaPlayer(this);
    //设置对应mediaplayer的QvideoWidget
    mediaPlayer->setVideoOutput(ui->widget);
    //设置播放属性
    //1 监听信号变化函数
    connect(mediaPlayer,SIGNAL(stateChanged(QMediaPlayer::State)),this,SLOT(mediaStateChanged(QMediaPlayer::State)));
    //播放进度信号变化
    connect(mediaPlayer,SIGNAL(positionChanged(qint64)),this,SLOT(positionChanged(qint64)));
    //媒体播放长度信号变化
    connect(mediaPlayer,SIGNAL(durationChanged(qint64)),this,SLOT(durationChanged(qint64)));
    //设置播放错误关联
    connect(mediaPlayer,SIGNAL(error(QMediaPlayer::Error)),this,SLOT(handleError()));


    //设置播放按钮
    ui->toolButton->setToolTip("播放");
//    ui->toolButton->setAutoRaise(true);
    ui->toolButton->setIcon(QPixmap("C:/Users/zfc/Desktop/imag/2 (1).jpg"));

    //设置打开文件按钮
    ui->toolButton_2->setToolTip("打开文件");
    //设置按钮自动升起
    ui->toolButton_2->setAutoRaise(true);
    ui->toolButton_2->setIcon(QPixmap("C:/Users/zfc/Desktop/imag/open.png"));
}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::play(){
    //获取播放状态
    switch(mediaPlayer->state()){
    case QMediaPlayer::PlayingState:
        mediaPlayer->pause();
        break;
    default:
        mediaPlayer->play();
        break;
    }
}
void MainWindow::mediaStateChanged(QMediaPlayer::State state){
    //设置mediaplayer播放过程中动态调整播放进度
    switch (state) {
    case QMediaPlayer::PlayingState:
        ui->toolButton->setToolTip("暂停");
        ui->toolButton->setIcon(QPixmap("C:/Users/zfc/Desktop/imag/2 (3).jpg"));
        break;
    default:
        ui->toolButton->setToolTip("播放");
        ui->toolButton->setIcon(QPixmap("C:/Users/zfc/Desktop/imag/2 (2).jpg"));
        break;
    }
}
void MainWindow::setPosition(int position){
    //调整播放进度
    mediaPlayer->setPosition(position);
}

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

void MainWindow::positionChanged(qint64 position){
    //改变播放位置
    ui->horizontalSlider->setValue(position);
}
void MainWindow::on_toolButton_clicked()
{
    play();
    //需要设置按钮暂停样式 测试
//    ui->toolButton->setToolTip("暂停");
//    ui->toolButton->setIcon(QPixmap("C:/Users/zfc/Desktop/imag/2 (3).jpg"));
}

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();
    //设置播放的内容
    mediaPlayer->setMedia(QUrl::fromLocalFile(filename));
    ui->toolButton->setAutoRaise(true);

}

mainwindow.ui:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值