QT 播放器之QMediaPlayer与UI的连接

当选中全屏时,应该全屏窗口并且隐藏菜单栏

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;
    }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鱼游戏开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值