• qt6 多媒体开发代码分析(四、视频播放)


    1. #include "mainwindow.h"
    2. #include "ui_mainwindow.h"
    3. #include
    4. MainWindow::MainWindow(QWidget *parent) :
    5. QMainWindow(parent),
    6. ui(new Ui::MainWindow)
    7. {
    8. ui->setupUi(this);
    9. player = new QMediaPlayer(this); //创建视频播放器
    10. QAudioOutput *audioOutput= new QAudioOutput(this);
    11. player->setAudioOutput(audioOutput); //设置音频输出通道
    12. player->setVideoOutput(ui->videoWidget); //设置视频显示组件
    13. ui->videoWidget->setMediaPlayer(player);//设置显示组件的关联播放器
    14. connect(player,&QMediaPlayer::playbackStateChanged,this, &MainWindow::do_stateChanged);
    15. connect(player,&QMediaPlayer::positionChanged,this, &MainWindow::do_positionChanged);
    16. connect(player,&QMediaPlayer::durationChanged,this, &MainWindow::do_durationChanged);
    17. }
    18. MainWindow::~MainWindow()
    19. {
    20. delete ui;
    21. }
    22. void MainWindow::do_stateChanged(QMediaPlayer::PlaybackState state)
    23. {//播放器状态变化
    24. bool isPlaying = (state==QMediaPlayer::PlayingState);
    25. ui->btnPlay->setEnabled(!isPlaying);
    26. ui->btnPause->setEnabled(isPlaying);
    27. ui->btnStop->setEnabled(isPlaying);
    28. }
    29. void MainWindow::do_durationChanged(qint64 duration)
    30. {//文件时长变化
    31. ui->sliderPosition->setMaximum(duration);
    32. int secs=duration/1000; //秒
    33. int mins=secs/60; //分钟
    34. secs=secs % 60; //余数秒
    35. durationTime=QString::asprintf("%d:%d",mins,secs);
    36. ui->LabRatio->setText(positionTime+"/"+durationTime);
    37. }
    38. void MainWindow::do_positionChanged(qint64 position)
    39. {//文件播放位置变化
    40. if (ui->sliderPosition->isSliderDown())
    41. return; //如果正在拖动滑条,退出
    42. ui->sliderPosition->setSliderPosition(position);
    43. int secs=position/1000; //秒
    44. int mins=secs/60; //分钟
    45. secs=secs % 60; //余数秒
    46. positionTime=QString::asprintf("%d:%d",mins,secs);
    47. ui->LabRatio->setText(positionTime+"/"+durationTime);
    48. }
    49. void MainWindow::on_btnAdd_clicked()
    50. {//打开文件
    51. QString curPath=QDir::homePath();
    52. QString dlgTitle="选择视频文件";
    53. QString filter="视频文件(*.wmv, *.mp4);;所有文件(*.*)";
    54. QString aFile=QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter);
    55. if (aFile.isEmpty())
    56. return;
    57. QFileInfo fileInfo(aFile);
    58. ui->labCurMedia->setText(fileInfo.fileName());
    59. player->setSource(QUrl::fromLocalFile(aFile)); //设置播放文件
    60. player->play();
    61. }
    62. void MainWindow::on_btnPlay_clicked()
    63. {//播放
    64. player->play();
    65. }
    66. void MainWindow::on_btnPause_clicked()
    67. {//暂停
    68. player->pause();
    69. }
    70. void MainWindow::on_btnStop_clicked()
    71. {//停止
    72. player->stop();
    73. }
    74. void MainWindow::on_sliderVolumn_valueChanged(int value)
    75. {//调节音量
    76. player->audioOutput()->setVolume(value/100.0);
    77. }
    78. void MainWindow::on_btnSound_clicked()
    79. {//静音按钮
    80. bool mute=player->audioOutput()->isMuted();
    81. player->audioOutput()->setMuted(!mute);
    82. if (mute)
    83. ui->btnSound->setIcon(QIcon(":/images/images/volumn.bmp"));
    84. else
    85. ui->btnSound->setIcon(QIcon(":/images/images/mute.bmp"));
    86. }
    87. void MainWindow::on_sliderPosition_valueChanged(int value)
    88. {//播放位置
    89. player->setPosition(value);
    90. }
    91. void MainWindow::on_pushButton_clicked()
    92. {//全屏按钮
    93. ui->videoWidget->setFullScreen(true);
    94. }

    这是一个使用Qt框架编写的视频播放器应用程序,它具有以下功能:

    1. 创建了一个QMediaPlayer对象作为视频播放器,并设置了音频输出通道和视频显示组件。
    2. 通过connect函数将播放器的状态变化、文件时长变化和文件播放位置变化与相应的槽函数连接起来。
    3. 在状态变化的槽函数中,根据播放器的状态更新播放、暂停和停止按钮的可用性。
    4. 在文件时长变化的槽函数中,设置滑动条的最大值,并计算并显示文件的总时长。
    5. 在文件播放位置变化的槽函数中,如果滑动条正在被拖动,则不做处理;否则,设置滑动条的位置,并计算并显示当前播放的时间点。
    6. on_btnAdd_clicked槽函数响应“打开文件”按钮的点击事件,弹出文件选择对话框,选择视频文件后,设置播放器的播放源并开始播放。
    7. on_btnPlay_clickedon_btnPause_clickedon_btnStop_clicked分别响应“播放”、“暂停”和“停止”按钮的点击事件,调用播放器的相应方法进行播放、暂停和停止操作。
    8. on_sliderVolumn_valueChanged槽函数响应音量滑动条的值变化事件,根据滑动条的值调节音量。
    9. on_btnSound_clicked槽函数响应静音按钮的点击事件,切换静音状态并更新按钮图标。
    10. on_sliderPosition_valueChanged槽函数响应播放位置滑动条的值变化事件,根据滑动条的值调整播放位置。
    11. on_pushButton_clicked槽函数响应全屏按钮的点击事件,将视频显示组件设置为全屏显示。

    该代码需要与Qt框架一起使用,可以在Qt开发环境中进行编译和运行。它实现了基本的视频播放器功能,用户可以选择视频文件并进行播放、暂停、停止操作,调节音量和播放位置,以及全屏显示。

  • 相关阅读:
    Mac配置python wind量化接口
    Java 面试全解析:核心知识点与典型面试题
    Google Chrome谷歌浏览器去掉右上角更新提示图标
    云原生系统学习[Kubernetes]——02 Pod、Deployment、Service
    OpenCV/C++ 图片锐化
    面试字节跳动测试岗被吊打,60天苦修这些笔记,侥幸收获offer
    使用Python 获取天气数据
    在SpringBoot项目中整合拦截器
    ArtFlow: Unbiased Image Style Transfer via Reversible Neural Flows
    OSM+three.js打造3D城市
  • 原文地址:https://blog.csdn.net/wh_xia_jun/article/details/133930017