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信号相互调用。
运行结果:
{{ cmt.username }}
{{ cmt.content }}
{{ cmt.commentDate | formatDate('YYYY.MM.DD hh:mm') }}