.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界面布局:
2、.h文件:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMediaPlayer>
#include <QVideoWidget>
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<QPixmap>
#include<QFrame>
#include<QHBoxLayout>
#include<QFileDialog>
#include<QString>
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);
}
结果显示:
PS:附上自己下载的链接:链接中有图片,我给删除了
https://download.csdn.net/download/weixin_41822958/10557334