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


    🙌秋名山码民的主页
    😂oi退役选手,Java、大数据、单片机、IoT均有所涉猎,热爱技术,技术无罪
    🎉欢迎关注🔎点赞👍收藏⭐️留言📝
    获取源码,添加WX


    一、前言

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

    基于qt的MP4视频播放器

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

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

    头文件主要有这几个:

    #include 
    #include 
    #include 
    
    #include 
    
    #include 
    #include 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. QMediaPlayer:用于播放音频和视频的主要类。可以使用它来控制媒体的播放、暂停、停止等操作。

    2. QMediaPlaylist:用于管理媒体播放列表。可以向播放列表中添加多个媒体文件,并控制播放顺序、循环播放等。

    3. QVideoWidget:用于显示视频的小部件。可以将QVideoWidget添加到您的应用程序窗口中,以显示正在播放的视频。

    4. QGraphicsVideoItem:这个类是用于在Qt图形场景中显示视频的项。它可以与QGraphicsView和QGraphicsScene一起使用,以实现更灵活的视频显示和交互。

    5. QFileDialog:这个类用于显示文件选择对话框,以便用户选择要播放的媒体文件。

    6. QGraphicsScene:这个类是Qt图形场景的基类,用于管理和显示2D图形项。您可以使用QGraphicsScene来显示视频或其他图形项。

    如果添加显示无法找到库,在pro文件中加上:
    在这里插入图片描述

    三、 ui设计

    ui界面如下图所示:
    在这里插入图片描述

    四、函数编写

    4.1 打开文件

    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();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    4.2 播放

    void MainWindow::on_playButton_clicked()
    {
        player->play();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4.3 暂停

    void MainWindow::on_pauseButton_clicked()
    {
        player->pause();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4.4 停止

    void MainWindow::on_stopButton_clicked()
    {
        player->stop();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4.5 控制音量

    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"));;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    4.6 播放时间

    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);
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    最后

    如果本文对你有所帮助,还请三连支持一下博主!
    请添加图片描述

  • 相关阅读:
    .net 动态代理实现
    二、MyBatis-Plus 主键策略
    【考研高数 自用】高数第一章基础部分思维导图
    Mongodb的基本操作
    Github又悄悄升级了,这次的变化是大文件的存储方式
    redis的原理和源码-集群的原理和源码解析(下)
    2023-09-06力扣每日一题-摆烂暴力
    五、线程同步 synchronized
    如何建立扫描光源
    [数据集][目标检测]旋风检测数据集VOC+YOLO格式157张1类别
  • 原文地址:https://blog.csdn.net/weixin_45920495/article/details/133344834