前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >QT入门10个小demo——MP4视频播放器

QT入门10个小demo——MP4视频播放器

作者头像
秋名山码神
发布2023-10-16 14:24:34
9610
发布2023-10-16 14:24:34
举报
文章被收录于专栏:码神随笔码神随笔

一、前言

学完qt好几个月了,一直没做相关的项目巩固,这次分享10个qt相关的小项目来练练手。

基于qt的MP4视频播放器:

  1. 所使用的技术为qt自带的视频库
  2. ui设计为qt图形化设计
  3. IDE为qtcreator

二、 视频库播放的前置知识

头文件主要有这几个:

代码语言:javascript
复制
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QVideoWidget>

#include <QGraphicsVideoItem>

#include <QFileDialog>
#include <QGraphicsScene>
  1. QMediaPlayer:用于播放音频和视频的主要类。可以使用它来控制媒体的播放、暂停、停止等操作。
  2. QMediaPlaylist:用于管理媒体播放列表。可以向播放列表中添加多个媒体文件,并控制播放顺序、循环播放等。
  3. QVideoWidget:用于显示视频的小部件。可以将QVideoWidget添加到您的应用程序窗口中,以显示正在播放的视频。
  4. QGraphicsVideoItem:这个类是用于在Qt图形场景中显示视频的项。它可以与QGraphicsView和QGraphicsScene一起使用,以实现更灵活的视频显示和交互。
  5. QFileDialog:这个类用于显示文件选择对话框,以便用户选择要播放的媒体文件。
  6. QGraphicsScene:这个类是Qt图形场景的基类,用于管理和显示2D图形项。您可以使用QGraphicsScene来显示视频或其他图形项。

如果添加显示无法找到库,在pro文件中加上:

在这里插入图片描述
在这里插入图片描述

三、 ui设计

ui界面如下图所示:

在这里插入图片描述
在这里插入图片描述

四、函数编写

4.1 打开文件

代码语言:javascript
复制
void MainWindow::on_openButton_clicked()
{
    QString strCurrentPath = QDir::homePath(); //获取系统当前目录
    QString strDlgTitle = "选择视频文件";
    QString strFilter = "MP4 File(*.mp4);;All File(*.*)";// 打开视频文件过滤
    QString strAllFiles = QFileDialog::getOpenFileName(this,strDlgTitle,strCurrentPath,strFilter);

    if(strAllFiles.isEmpty())
    {
        QMessageBox::information(this,"错误","打开视频文件失败,请重新检查",QMessageBox::Yes|QMessageBox::No);
        return;
    }
    

    QFileInfo fileInfos(strAllFiles); // 获取文件信息
    ui->label_2->setText(fileInfos.fileName());

    player->setMedia(QUrl::fromLocalFile(strAllFiles));
    player->play();
}

4.2 播放

代码语言:javascript
复制
void MainWindow::on_playButton_clicked()
{
    player->play();
}

4.3 暂停

代码语言:javascript
复制
void MainWindow::on_pauseButton_clicked()
{
    player->pause();
}

4.4 停止

代码语言:javascript
复制
void MainWindow::on_stopButton_clicked()
{
    player->stop();
}

4.5 控制音量

代码语言:javascript
复制
void MainWindow::on_pushButton_Sound_clicked()
{
    bool mte=player->isMuted();
    player->setMuted(!mte);

    if(mte)
        ui->pushButton_Sound->setIcon(QIcon(":/new/prefix1/images/volumn.bmp"));
    else
        ui->pushButton_Sound->setIcon(QIcon(":/new/prefix1/images/mute.bmp"));;
}

4.6 播放时间

代码语言:javascript
复制
void MainWindow::onDurationChanged(qint64 duration)
{
    ui->horizontalSlider_Position->setMaximum(duration);

    int   secs=duration/1000;//秒
    int   mins=secs/60; //分钟
    secs=secs % 60;//余数秒
    durationTime=QString::asprintf("%d:%d",mins,secs);
    ui->label_Ratio->setText(positionTime+"/"+durationTime);

}
void VideoPlayer::onPositionChanged(qint64 position)
{
    if (ui->horizontalSlider_Position->isSliderDown())
        return;

    ui->horizontalSlider_Position->setSliderPosition(position);//

    int   secs=position/1000;//秒
    int   mins=secs/60; //分钟
    secs=secs % 60;//余数秒
    positionTime=QString::asprintf("%d:%d",mins,secs);
    ui->label_Ratio->setText(positionTime+"/"+durationTime);

}

最后

如果本文对你有所帮助,还请三连支持一下博主!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、 视频库播放的前置知识
  • 三、 ui设计
  • 四、函数编写
    • 4.1 打开文件
      • 4.2 播放
        • 4.3 暂停
          • 4.4 停止
            • 4.5 控制音量
              • 4.6 播放时间
              • 最后
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档