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文件有些地方可能不完善,方法还凑活能用。

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java数组的三种初始化方式

    java数组的三种初始化方式2018年4月3日Java语言中数组必须先初始化,然后才可以使用。所谓初始化就是为数组的数组元素分配内存空间,并为每个数组元素附初始值。注意:数组完成初始化后,内存空间中针对该数组的各个元素就有个一个默认值:           基本数据类型的整数类型(byte、short、int、long)默认值是0;           基本数据类型的浮点类型(float、double)默认值是0.0; …

  • QQ空间钓鱼源码_QQ空间视频提取值源码

    QQ空间钓鱼源码_QQ空间视频提取值源码IgotthiswebsitefrommypalwhosharedwithmeconcerningthiswebpageandatthemomentthistimeIamvisitingthiswebsiteandreadingveryinformativearticlesorreviewshere.回复thejjreport.com…

  • substring方法截取字符串以及其他方式

    substring方法截取字符串以及其他方式方法一,指定字符,截取字符串,返回字符串数组:Stringstr=“abcd,123,123abc,fij23”;String[]strs=str.split(“,”);方法二,指定索引号,截取字符串:将字符串从索引号为5开始截取,一直到字符串末尾。(索引值从0开始):Stringstr=“asdfghjkl”;str.substring(5);从索引号2开始到索引好4结束(并且不包含索引4截取在内,也就是说实际截取的是2和3号字符):Stringsb=“asdfghj

  • C++——随机数算法

    C++——随机数算法前言:在这里,我们要明确,计算机随机化出来的数字都是伪随机数字,就是近似于随机数,简单来说这个伪随机数需要依靠一个种子来决定这个数值的大小。默认情况下,这个种子的值是1。这造成了如果不改变种子的值,我们生成的随机数就会是同一个值。所以,我们就要设置种子C语言版本在C语言里,产生随机数主要用上两个函数,一个是srand(),另外一个是rand()函数。这个也没啥介绍的,具体看代码,就传递几个参数。rand()函数会返回一个范围在0到RAND_MAX(至少是32767,我的机器上是int的最大值)之间的

  • Scalable_scared用法

    Scalable_scared用法qualifier:type(定义了类型)可选值:host,net,port,portrange例如:hosthostnameAnet172.31           //相当于172.31.0.0/16,又例如:192.168.1相当于192.168.1.0/24port80portrange6000-6010 

    2022年10月25日
  • ubuntu16.04安装cuda10.2_opencv cuda

    ubuntu16.04安装cuda10.2_opencv cuda由于实验需要,在实验室电脑上搭建深度学习Caffee框架。一共花了两天的时间,其中遇到了不少的问题,记录一下。Caffee在配置上相对来说比较麻烦,需要前期安装的东西比较多,逐一介绍。CUDA:NVIDIA系列显卡支持的GPU编程框架,其实如果本身电脑是AMD的显卡,不用装也可用Caffee,只是速度会比较慢。所以最好有一块像样的显卡,最后我就败在这个上面了。。。MKA或是OpenAtlas

    2022年10月30日

发表回复

您的电子邮箱地址不会被公开。

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