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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 傅里叶、拉普拉斯、z变换常用公式合集「建议收藏」

    傅里叶、拉普拉斯、z变换常用公式合集「建议收藏」傅里叶变换常用信号的傅里叶变换傅里叶变换的性质傅里叶性质—典型变换对拉普拉斯常用信号的单边拉普拉斯变换拉普拉斯变换的性质z变换常用序列的z变换z变换的性质…

    2022年7月17日
    22
  • 什么是SOAP,有哪些应用

    什么是SOAP,有哪些应用SOAP是一种轻量级协议,用于在分散型、分布式环境中交换结构化信息。SOAP利用XML技术定义一种可扩展的消息处理框架,它提供了一种可通过多种底层协议进行交换的消息结构。这种框架的设计思想是要独立于任何一种特定的编程模型和其他特定实现的语义。SOAP规范还定义了HTTP消息是怎样传输SOAP消息的。MSMQ、SMTP、TCP/IP都可以做SOAP的传输协议。转载于:ht…

    2022年7月24日
    6
  • oracle数据库基础教程_象棋初学者入门教程

    oracle数据库基础教程_象棋初学者入门教程https://www.cnblogs.com/kscnchina/p/4570865.html非常非常推荐这个教程

    2022年9月25日
    3
  • Putty(菩提)远程连接服务器教程听语音

    Putty(菩提)远程连接服务器教程听语音

    2021年10月8日
    57
  • C++实现二叉树层序遍历

    C++实现二叉树层序遍历层序遍历图示实现二叉树的层次遍历,要利用到队列。基本思想:1.先将根节点放到队列中2.根节点弹出队列,然后将根节点的左、右儿子入队3.弹出左儿子,放入左儿子的左右儿子4.弹出右儿子,放入右儿子的左右儿子5.重复3、4步图示过程:所用的二叉树如下队列的操作:将根节点弹出,放入左右儿子:将B节点弹出,放入左右儿子(只有右儿子):把D节点弹出,放入左右儿子:C、E、F都没有儿子节点,所以直接弹出队列即可: C++代码实现1.利用前序遍历思想输入二叉树。(前序

    2022年5月21日
    28
  • vue中上传文件_vue实现文件上传和下载

    vue中上传文件_vue实现文件上传和下载列子一:简单的上传文件,先把文件上传到input框只展示文件名,不走接口,之后点击确定上传按钮统一上传<template> <div> <Col> <FormItemlabel=”上传文件:”prop=”plugin_name”> <Inputv-model=”setValidate.plugin_name”placeholder=”请选择上传文件(.ZIP格式)”></Input> </Fo

    2022年8月31日
    8

发表回复

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

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