当选中全屏时,应该全屏窗口并且隐藏菜单栏
connect(ui->fullScreenCheckBox,&QCheckBox::stateChanged,this,&MainWindow::setFullScreen);
void MainWindow::setFullScreen(bool isfull)
{
if(isfull)
{
this->showFullScreen();
ui->menuBar->hide();
m_frame->setMargins(0,0,0,0);
this->centralWidget()->layout()->setMargin(0);
}
else
{
centralWidget()->layout()->setContentsMargins(0,5,0,5);
m_frame->setMargins(5,5,5,5);
this->showNormal();
ui->menuBar->show();
}
}
当双击VideoWidget的时候我应该全屏窗口~
connect(ui->video,&VideoWidget::doubleClieck,this,&MainWindow::doubleClickVideo);
void MainWindow::doubleClickVideo()
{
if(ui->fullScreenCheckBox->checkState() == Qt::Unchecked)
{
ui->fullScreenCheckBox->setCheckState(Qt::Checked);
}
else
{
ui->fullScreenCheckBox->setCheckState(Qt::Unchecked);
}
}
当按下播放按钮时。我应该播放视频
connect(ui->playButton,&QPushButton::clicked,this,&MainWindow::play);
void MainWindow::play()
{
if(m_player->state() == QMediaPlayer::PlayingState)
{
m_player->pause();
}
else
{
m_player->play();
}
}
同时需要把播放按钮切换为暂停
void MainWindow::stateChanged(QMediaPlayer::State state)
{
switch(state)
{
case QMediaPlayer::PlayingState:
{
ui->playButton->setText(QStringLiteral("暂停"));
ui->video->hideOpenButton();
ui->progressWidget->show();
QFileInfo info(m_player->media().canonicalUrl().path());
ui->title->setText(info.baseName());
setState(QStringLiteral("播放"));
ui->upButton->setEnabled(true);
ui->downButton->setEnabled(true);
ui->stopButton->setEnabled(true);
ui->fullScreenCheckBox->setEnabled(true);
break;
}
case QMediaPlayer::PausedState:
{
ui->playButton->setText(QStringLiteral("播放"));
setState(QStringLiteral("暂停"));
break;
}
case QMediaPlayer::StoppedState:
{
ui->title->setText("");
ui->playButton->setText(QStringLiteral("播放"));
ui->video->showOpenButton();
ui->progressWidget->hide();
ui->upButton->setEnabled(false);
ui->downButton->setEnabled(false);
ui->stopButton->setEnabled(false);
ui->fullScreenCheckBox->setEnabled(false);
ui->video->setImage(QImage());
ui->fullScreenCheckBox->setCheckState(Qt::Unchecked);
break;
}
}
}
当按下加速或减速,据说播放速率默认为1,但是如果你用 player->playbackRate() 获取会发现返回的是 0
connect(ui->moderateButton,&QPushButton::clicked,this,&MainWindow::moderate);
connect(ui->quickenButton,&QPushButton::clicked,this,&MainWindow::quicken);
void MainWindow::moderate()
{
m_rate-=0.1;
if(m_rate<0)
{
m_rate=0;
}
m_player->setPlaybackRate(1+m_rate);
setState(QString("X %1").arg(1+m_rate));
}
void MainWindow::quicken()
{
m_rate+=0.1;
m_player->setPlaybackRate(1+m_rate);
setState(QString("X %1").arg(1+m_rate));
}
播放的时候设置播放的时间。
当进度条正在被拖动的时候不应该设置进度条值
ui->positionSlider->isSliderDown()
connect(m_player,&QMediaPlayer::durationChanged,this,&MainWindow::durationChanged);
void MainWindow::durationChanged(qint64 duration)
{
ui->positionSlider->setMaximum(duration/1000);
ui->totalTime->setText(getTime(duration));
}
QString MainWindow::getTime(qint64 value)
{
value/=1000;
QTime time((value / 3600) % 60, (value / 60) % 60,
value % 60, (value * 1000) % 1000);
return time.toString("hh:mm:ss");
}
connect(m_player,&QMediaPlayer::positionChanged,this,&MainWindow::positionChanged);
void MainWindow::positionChanged(qint64 position)
{
if(!ui->positionSlider->isSliderDown())
{
ui->positionSlider->setValue(position/1000);
}
ui->durationTime->setText(getTime(position));
}
拖动进度条后当然是设置播放进度啦
connect(ui->positionSlider,&QSlider::sliderReleased,this,&MainWindow::jumpPosition);
void MainWindow::jumpPosition()
{
m_player->setPosition(ui->positionSlider->value()*1000);
}
状态切换时,显示状态 ,并且3秒后隐藏状态,如果3秒内状态改变,删除上一个计时器
void MainWindow::setState(QString value)
{
ui->state->setText(value);
ui->state->show();
if(m_timerID!=-1)
{
killTimer(m_timerID);
}
m_timerID = this->startTimer(3000);
}
void MainWindow::timerEvent(QTimerEvent *event)
{
if(event->timerId() == m_timerID)
{
ui->state->hide();
killTimer(m_timerID);
m_timerID=-1;
}
}