【基于QMediaPlayer的简易视频播放器】— 2、QMediaPlayer的基本使用

基于QMediaPlayer的简易视频播放器

  • 1、创建基本布局
  • 2、QMediaPlayer的基本使用
  • 3、结合QSlider实现播放进度控制
  • 4、重载QSlider鼠标响应事件,实现单击跳转至任意位置

2、QMediaPlayer的基本使用

这里不对QMediaPlayer类进行详细介绍,可以参考 [ 官方文档 ] [ zwlq1314521的专栏 ]

首先打开Qt的工程文件*.pro,向其中添加引用项:

QT       += core gui \
        multimedia \
        multimediawidgets

点击 构建-执行qmake,或者在项目窗口中右击执行qmake,使.pro文件配置生效

在mediaplayer.cpp中添加头文件,并定义全局变量

#include <QMediaPlayer>
#include <QVBoxLayout>
#include <QVideoWidget>
#include <QFileDialog>
#include <QFile>
#include <QMessageBox>

//播放视频的全局变量
QVBoxLayout* layout_video;//布局
QMediaPlayer* player;   //播放器
QVideoWidget* widget;   //视频播放控件

//播放状态,true为播放,false为暂停
bool play_state;
//是否重新载入视频
bool if_reload=false;

在载入ui时,先禁用播放/暂停按钮和音量按钮:

MediaPlayer::MediaPlayer(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MediaPlayer)
{
    ui->setupUi(this);
    ui->pushButton_play_and_pause->setEnabled(false);
    ui->pushButton_volume->setEnabled(false);
}

在Designer中右击“打开”pushButton控件,“转到槽”->”clicked()”->”ok”
槽函数如下:

void MediaPlayer::on_pushButton_open_file_clicked()
{
    //选择视频文件
    QString filename = QFileDialog::getOpenFileName(this,tr("选择视频文件"),".",tr("视频格式(*.avi *.mp4 *.flv *.mkv)"));
    QFile file(filename);
    if(!file.open(QIODevice::ReadOnly))
    {
        QMessageBox::information(NULL, "Title", "Content", QMessageBox::Ok, QMessageBox::Ok);
        return;
    }
    if(if_reload)
    {//重新加载视频时,重置以下变量
        delete layout_video;
        delete player;
        delete widget;
        delete timer;
    }
    if_reload = true;

    //实例化三个全局变量
    layout_video = new QVBoxLayout;
    player = new QMediaPlayer;
    widget = new QVideoWidget;
    //设置视频播放区域与Label的边距
    layout_video->setMargin(1);
    //根据label_player尺寸设置播放区域
    widget->resize(ui->label_player->size());
    layout_video->addWidget(widget);
    ui->label_player->setLayout(layout_video);
    player->setVideoOutput(widget);



    //设置播放器
    player->setMedia(QUrl::fromLocalFile(filename));
    //play_state为true表示播放,false表示暂停
    play_state = true;
    //启用播放/暂停按钮,并将其文本设置为“暂停”
    ui->pushButton_play_and_pause->setEnabled(true);
    ui->pushButton_play_and_pause->setText("暂停");
    //播放器开启
    player->play();
}

到这一步,就已经可以播放视频了。接下来我们添加“播放/暂停”按钮的槽函数:

void MediaPlayer::on_pushButton_play_and_pause_clicked()
{
    //反转播放状态
    if(play_state)
    {
        player->pause();
        ui->pushButton_play_and_pause->setText("播放");
    }
    else
    {
        player->play();
        ui->pushButton_play_and_pause->setText("暂停");
    }

    play_state = !play_state;
}

好了,打开测试一下:
播放测试

如果播放时出现只有声音而没有画面的情况,那就是解码器的问题。在写这个程序时找了久的原因,最后在这篇博文里找到了解决方案: [ CN小黑 极客人生] 推荐安装K-Lite解码器。

至此,基于QMediaPlayer的核心播放功能已经编写完成,接下来我们通过QSlider对播放进度和音量进行控制。

[ 结合QSlider实现播放进度控制]

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值