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


相关推荐

  • 动漫常用网站/APP 彻底帮你解决看动漫的烦恼[通俗易懂]

    动漫常用网站/APP 彻底帮你解决看动漫的烦恼[通俗易懂]本文是众多使用技巧中其中的一篇,全部使用技巧点击链接查看,保证你收获满满我主页中的思维导图中内容大多从我的笔记中整理而来,相应技巧可在笔记中查找原题,有兴趣的可以去我的主页了解更多计算机学科的精品思维导图整理本文可以转载,但请注明来处,觉得整理的不错的小伙伴可以点赞关注支持一下哦!本文提到的所有软件和工具,可关注公众号一起学计算机点击资源获取获得本人最常用的网站就是AGE动漫,这是我用过最好的动漫网站,资源算是最全的吧,并且大多数动漫都提供百度云链接,可下载观看,…

    2022年8月23日
    3
  • MSF搭建socks代理[通俗易懂]

    MSF搭建socks代理[通俗易懂]目录搭建代理添加路由​搭建Socks4a代理搭建Socks5代理连接代理搭建代理当我们通过MSF拿到一个机器的权限后,想通过MSF搭建socks代理,然后通内网。MSF中有三个代理模块,分别是socks4a、socks5、socks_unc。我们一般用socks4a和socks5进行代理。socks5可以设置用户名和密码。这里运行代理后,有时候MSF不会监听端口…

    2022年6月16日
    113
  • Eth-trunk 链路聚合技术_eth-trunk配置

    Eth-trunk 链路聚合技术_eth-trunk配置链路聚合模式、Eth-Trunk的优势、Eth-Trunk接口配置流程、LACP抢占机制、Eth-Trunk接口负载分担、Eth-Trunk接口配置注意事项

    2022年10月26日
    0
  • C++ gbk与utf8互转

    C++ gbk与utf8互转本文代码已在 vs2017 上验证 gbk 转 utf8 容易出现中文乱码 有的时候在 x8632 位编译环境下中文显示正常 但切换到 x6464 位编译环境下会乱码 本文所示的代码在 32 位和 64 位编译环境下均不会出现乱码 使用例子见 include iostream include stdlib h include string include string h include windows h usingnames windows h string h string stdlib h iostream

    2025年6月6日
    0
  • 什么是RIA 技术?

    什么是RIA 技术?RIA是什么东西,这是真么技术。。。我写这篇博客中,就带着这么两个问题开始收集资料RIA(RichInterfaceApplications)富界面应用,俗称胖客户端.RIA的优势RIA具有的

    2022年7月4日
    19
  • c语言 几种占位符的区别

    c语言 几种占位符的区别

    2021年9月29日
    37

发表回复

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

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