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

2023-10-16 14:24:34 浏览数 (2)

一、前言

学完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);

}

最后

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

0 人点赞