Qt实战项目:播放器(一):基础功能

一、开始

1、准备

最近学了C++以及Qt,做个播放器练手,打算先完成基础功能,之后再完善程序。
我使用的是Qt5,要使用QMediaPlayer等文件需要修改.pro文件:

QT += core gui multimedia multimediawidgets

使用媒体文件解析器
LAVFilters解码器 下载链接:https://github.com/Nevcairiel/LAVFilters/releases

2、设计思路,基本功能实现

(1)打开文件并播放;
(2)按钮控制播放和停止;
(3)设置音量;
(4)设置进度条;

二、ui设计

在这里插入图片描述

三、程序设计

头文件使用:

#include < QMainWindow >
#include < QMediaPlayer >
#include < QVideoWidget >
#include < QDebug >
#include < QFileDialog >
#include < QSlider >
#include “mouseslider.h”

1、打开一个多媒体文件

//打开文件,并在左下角显示名称
connect(ui->pushButton_Add,&QPushButton::clicked,this,&MainWindow::openFile);
void MainWindow::openFile()
{
ui->widget_Screen->setAttribute(Qt::WA_DeleteOnClose);
//打开文件,获取文件绝对路径,并且进行多媒体文件过滤
QString mediaPath = QFileDialog::getOpenFileName(
this,“open”,“…/”,“mp4(.mp4);;avi(.avi);;mkv(.mkv);;all(.*)”);
if (mediaPath.isEmpty())
return;
//qDebug() << mediaPath;
//右下角显示文件名称
QFileInfo fileInfo(mediaPath);
ui->label_currentName->setText(fileInfo.fileName());
//开始播放
playList();
}

2、开始播放

void MainWindow::playList()
{
//视频播放
m_Player = new QMediaPlayer(this);
m_Player->setVideoOutput(ui->widget_Screen);//视频输出到QVideoWidget
// ui->widget_Screen->setFullScreen(true); //全屏显示
m_Player->setMedia(QUrl::fromLocalFile(mediaPath));//加载视频文件
m_Player->play();//播放视频
mediaPath.clear();
//设置初始音量
m_Player->setVolume(50);
ui->horizontalSlider_sound->setValue(50);
//进度条增长
connect(m_Player,&QMediaPlayer::durationChanged,this,&MainWindow::initStep);
connect(m_Player,&QMediaPlayer::positionChanged,this,&MainWindow::stepChange);
}

3、按键控制(播放、暂停、设置音量)

//播放
connect(ui->pushButton_Play,&QPushButton::clicked,this,&MainWindow::buttonPlay);
//暂停
connect(ui->pushButton_Pause,&QPushButton::clicked,this,&MainWindow::buttonPause);
//手动设置音量
connect(ui->horizontalSlider_sound,&QSlider::sliderReleased,this,&MainWindow::soundChange);
void MainWindow::buttonPlay()
{
m_Player->play();//播放视频
}
void MainWindow::buttonPause()
{
m_Player->pause();//暂停视频
}
void MainWindow::soundChange()
{
m_Player->setVolume(ui->horizontalSlider_sound->value());//设置音量
}

4、进度条设置(鼠标事件修改)

protected:
void mousePressEvent(QMouseEvent *ev) override;
signals:
void mySignal(qint64);
void mouseSlider::mousePressEvent(QMouseEvent *ev)
{
int currentX = ev->pos().x();
int value;
//获取此时鼠标对应位置的滑块值
double per = currentX 1.0 /this->width();
value = per
(this->maximum() - this->minimum()) + this->minimum();
//设置滑块值
// this->setValue(value);
emit mySignal(value);
}
//鼠标按下后,获得在滑条上的位置,滑块跟随鼠标来到这个位置
connect(ui->horizontalSlider_videaPose,&mouseSlider::mySignal,this,&MainWindow::setStep);
void MainWindow::setStep(qint64 value)
{
//qDebug() << str;
m_Player->setPosition(value);//设置播放位置
m_Player->play();//播放视频
}

四、存在的问题

 1、连续打开多个文件时,前一个文件无法关闭;
 2、在未打开文件时,设置音量和进度条会程序中止;
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值