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)
blank

相关推荐

发表回复

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

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