Qt播放器常用设置

Qt播放器常用设置播放效果1.pro文件增加项……QT+=multimediamultimediawidgets……..2.头文件voidinit();voidpositionChanged(qint64position);voiddurationChanged(qint64duration);…

大家好,又见面了,我是你们的朋友全栈君。

 

Qt播放器常用设置
播放效果

 

1.pro文件增加项

……

QT += multimedia  multimediawidgets

……..

2.头文件

     void init();

  void positionChanged(qint64 position);
    void durationChanged(qint64 duration);
    void on_playButton_clicked();
    void updateDurationInfo(qint64 currentInfo);
 void on_treeView_player_doubleClicked(const QModelIndex &index);//这个是绑定文件双击打开,当然也可以修改成打开本地文件播放的形式。

3. .cpp文件 (UI->调的控件都要在ui界面里设置好,再布置其他控件)

void MainWindow::init()
 {//视频文件
     appPath=QCoreApplication::applicationDirPath();
    model = new QFileSystemModel();
    model->setRootPath(appPath);
    videoPath=appPath+"/player";
    ui->treeView_player->setModel(model);
    ui->treeView_player->setRootIndex(model->index(videoPath));
    m_mediaPlayer=new QMediaPlayer(ui->widget_player,QMediaPlayer::VideoSurface);
    //视频播放
    m_mediaPlayer=new QMediaPlayer(ui->widget_player,QMediaPlayer::VideoSurface);
    videoWidget = new QVideoWidget;
    videoWidget->setAspectRatioMode(Qt::IgnoreAspectRatio);
    playList=new QMediaPlaylist;
    //播放器布局
    QVBoxLayout  *layout=new QVBoxLayout;
    layout->addWidget(videoWidget);
    ui->widget_player->setLayout(layout);
    videoWidget->setPalette(Qt::black);
    ui->playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
    //滑块设置
    ui->m_positionSlider->setRange(0, m_mediaPlayer->duration() / 1000);
    connect(ui->m_positionSlider, &QSlider::sliderMoved, this, &MainWindow::seek);
    ui->label_time->hide();
}
void MainWindow::initConnect()      //连接slide和时间(快进 快退)
{    
    connect(m_mediaPlayer,SIGNAL(durationChanged(qint64)),this,SLOT(durationChanged(qint64)));
    connect(m_mediaPlayer,SIGNAL(positionChanged(qint64)),this,SLOT(positionChanged(qint64)));
}
void MainWindow::on_playButton_clicked()            //播放暂停按钮
{
  
  
    if(m_mediaPlayer->state()==QMediaPlayer::PlayingState){
  
  
        m_mediaPlayer->pause();
        ui->playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));  //播放时显示播放按钮  }
    else {
  
  
        m_mediaPlayer->play();
        ui->playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPause)); //暂停时显示播放按钮   }
}
void MainWindow::on_treeView_player_doubleClicked(const QModelIndex &index)             //视频目录双击
{    //如果是文件夹  返回
    if(model->isDir(index)){
  
  
        return;
    }
    QString path=model->filePath(index);
    playList->clear();//清空列表
    playList->addMedia(QUrl::fromLocalFile(path));
    m_mediaPlayer->setPlaylist(playList);
    m_mediaPlayer->setVideoOutput(videoWidget);
    m_mediaPlayer->play();
    if(m_mediaPlayer->state()==QMediaPlayer::PlayingState){
        ui->playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPause));
        ui->label_time->show();    }
}
void MainWindow::durationChanged(qint64 duration)           //视频时间设置
{
  
  
    m_duration = duration / 1000;
    ui->m_positionSlider->setMaximum((int)duration/1000);
}
void MainWindow::positionChanged(qint64 progress)             //滑块设置
{
  
  
    //if (!m_positionSlider->isSliderDown())
    ui-> m_positionSlider->setValue((int)progress / 1000);
    updateDurationInfo(progress / 1000);
}
void MainWindow::updateDurationInfo(qint64 currentInfo)        // slide时间显示格式设置
{
    QString tStr;
    if (currentInfo || m_duration) {
  
  
        QTime currentTime((currentInfo / 3600) % 60, (currentInfo / 60) % 60,
                          currentInfo % 60, (currentInfo * 1000) % 1000);
        QTime totalTime((m_duration / 3600) % 60, (m_duration / 60) % 60,
                        m_duration % 60, (m_duration * 1000) % 1000);
        QString format = "mm:ss";
        if (m_duration > 3600)
            format = "hh:mm:ss";
        tStr = currentTime.toString(format) + " / " + totalTime.toString(format);
    }
    ui->label_time->setText(tStr);
}
void MainWindow::seek(int seconds)                  //滑块视频快进快退等
{
  
  
    m_mediaPlayer->setPosition(seconds * 1000);
    //    m_mediaPlayer->play();
}

一些包含文件使用ctrl+enter可添加,或自己在帮助上查找添加等都可。

头文件或者pro文件有些地方可能不完善,方法还凑活能用。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133657.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 简易旋转倒立摆及控制系统实现方案_自动旋转装置怎么做

    简易旋转倒立摆及控制系统实现方案_自动旋转装置怎么做摘要本系统是基于TM4单片机来完成各项功能的,实现了一套简易旋转倒立摆及其控制装置。旋转倒立摆的结构如图1所示。电动机A固定在支架B上,通过转轴F驱动旋转臂C旋转。摆杆E通过转轴D固定在旋转臂C的一端,当旋转臂C在电动机A驱动下作往复旋转运动时,带动摆杆E在垂直于旋转臂C的平面作自由旋转。其中系统的驱动采用了Mos管电机驱动;姿态获取通过角度传感器;控制部分采用PID算法,实现题目在角度等的精度要求和及时性;该系统通过串口通信来进行PID各参数的串口调

    2022年8月18日
    13
  • php模糊查询技术「建议收藏」

    php模糊查询技术「建议收藏」     查询可分为精确查询【返回结果有且仅有一条】                      模糊查询【返回结果不确定】      在下面的讲述中我们主要讲解模糊查询        在生活中,我们身边有很多的信息源,我们需要筛选出与自己相关的信息,例如相同的兴趣爱好,来进行与自己的信息匹配。 这是在生活中的模糊查询的一个体现。在项目模糊查询中相对来说就更多了,例如web网页中的一…

    2022年5月26日
    34
  • 如何进行数据库备份「建议收藏」

    如何进行数据库备份「建议收藏」简单备份一个数据库

    2022年5月14日
    47
  • java文件处理(3)——实现文件复制和文件移动「建议收藏」

    java文件处理(3)——实现文件复制和文件移动「建议收藏」任务要求:通过二进制流的操作方式把程序调整为可以实现对任何类型文件进行文件复制(而不是调用windows命令行的内部命令copy)。通过二进制流的操作方式把程序调整为可以实现对任何类型文件进行文件移动(而不是调用windows命令行的外部命令move)。1.介绍InputStream和OutputStreamInputStream和OutputStream是抽象类,是所有字节输入流和输…

    2022年6月22日
    28
  • python基础系列教程——python基础语法全解

    python基础系列教程——python基础语法全解全栈工程师开发手册(作者:陈玓玏)python教程全解了解python1.了解PythonPython是一种解释型(这意味着开发过程中没有了编译这个环节)、面向对象(支持面向对象的风格或代码封装在对象的编程技术)、动态数据类型的交互式(可在命令行中通过Python提示符及直接代码执行程序)高级程序设计语言。2.Python标识符标识符由字母、数

    2022年7月22日
    12
  • setAttribute的具体用法

    setAttribute的具体用法setAttribute(stringname,stringvalue):增加一个指定名称和值的新属性,或者把一个现有的属性设定为指定的值。1、样式问题setAttribute("cl

    2022年7月1日
    23

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号