QT学习总结--视频播放

zhy

发布于 2020.03.28 11:09 阅读 2544 评论 0

  qt中有QMediaPlayer这个类可以实现媒体的播放。下面用QMediaPlayer类来实现avi格式的视频的播放。使用时需要pro文件中添加:QT+= multimedia


 

    QMediaPlayer提供了一些方法接下来会用到:

      1.setMedia(Qurl):设置媒体路径

      2. play() , pause(): 播放和暂停

      3. position():获取当前播放进度,返回int

      4. duration():获取媒体总播放长度,返回int

 

    程序中设置了进度条,进度条随着播放进度改变,进度条也可以控制播放进度。利用QMediaPlayer的positionChanged信号,和进度条的sliderMoved信号进行相互控制。

 

  代码如下:

    

void MainWindow::init()
{
    //播放进度改变触发函数positionChanged
    connect(player, &QMediaPlayer::positionChanged, this, &MainWindow::positionChanged);
    //设置媒体路径
    player->setMedia(QUrl::fromLocalFile("D:/time/1084117/英雄时刻_20190622-00点23分13s.avi"));
    //设置其他组件
    ui->play_btn->setMaximumSize(QSize(40,40));
    ui->play_btn->setMinimumSize(QSize(40,40));
    ui->fullscreen_btn->setMaximumSize(QSize(40,40));
    ui->fullscreen_btn->setMinimumSize(QSize(40,40));
    ui->play_btn->setStyleSheet("border-image: url(:/src/play.png);");
}


//设置视频进度条当前进度
void MainWindow::positionChanged(qint64 position)
{
    qDebug()<<position<<player->duration();//当前播放位置和总长度
    ui->mediaSlider->setRange(0,player->duration());//设置进度条的值范围
    ui->mediaSlider->setValue(position);
}

//valueChanged改用sliderMoved信号(进度条被拖动)
void MainWindow::on_mediaSlider_sliderMoved(int position)
{
    player->setPosition(position);
}

    之前用过mediaSlider的valueChanged信号出现了一个问题:valueChanged信号和QMediaPlayer::positionChanged信号相互调用。

 

运行结果: