You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QT 6.4中视频播放完毕后关闭QVideoWidget窗口的实现方法

QT 6.4 实现视频播放完毕自动关闭窗口及自定义组件播放方案

方案一:播放完毕自动关闭QVideoWidget窗口

核心是通过监听QMediaPlayer的媒体状态变化,捕捉视频播放结束的信号来触发窗口关闭操作,同时做好资源释放避免内存泄漏。

修改后的实现代码:

void MainWindow::on_playButton_clicked()
{
    QMediaPlayer* player = new QMediaPlayer(this);
    player->setSource(QUrl("C:/Users/QTDev/Desktop/final.mp4"));

    QAudioOutput *audioOutput = new QAudioOutput(this);
    player->setAudioOutput(audioOutput);
    audioOutput->setVolume(1.0);

    QVideoWidget* videoWidget = new QVideoWidget;
    player->setVideoOutput(videoWidget);

    // 监听媒体状态,播放结束时关闭窗口并释放资源
    connect(player, &QMediaPlayer::mediaStatusChanged, this, [=](QMediaPlayer::MediaStatus status){
        if(status == QMediaPlayer::EndOfMedia){
            videoWidget->close();
            videoWidget->deleteLater();
            player->deleteLater();
            audioOutput->deleteLater();
        }
    });

    videoWidget->showFullScreen();
    player->play();
}

关键说明:

  • 将player和audioOutput的父对象设为主窗口,或在关闭时调用deleteLater(),避免内存泄漏。
  • mediaStatusChanged信号会在媒体状态切换时触发,当状态为QMediaPlayer::EndOfMedia时,说明视频已播放完毕,此时执行窗口关闭和资源释放操作。

方案二:在QT Designer自定义组件中播放视频

如果需要在Designer设计的界面中嵌入视频播放组件,可按以下步骤实现:

  1. 在QT Designer中拖入一个QWidget,右键选择「提升为...」,输入QVideoWidget,确认头文件包含QVideoWidget,完成组件提升。
  2. 在代码中关联该自定义组件与媒体播放器,并添加播放结束逻辑。

示例代码:

// 假设Designer中提升的QVideoWidget对象名为ui_videoWidget
void MainWindow::on_playButton_clicked()
{
    QMediaPlayer* player = new QMediaPlayer(this);
    player->setSource(QUrl("C:/Users/QTDev/Desktop/final.mp4"));

    QAudioOutput *audioOutput = new QAudioOutput(this);
    player->setAudioOutput(audioOutput);
    audioOutput->setVolume(1.0);

    // 关联自定义的QVideoWidget组件
    player->setVideoOutput(ui->ui_videoWidget);

    // 播放结束逻辑:可关闭主窗口或隐藏组件
    connect(player, &QMediaPlayer::mediaStatusChanged, this, [=](QMediaPlayer::MediaStatus status){
        if(status == QMediaPlayer::EndOfMedia){
            this->close(); // 若只需隐藏组件,改为 ui->ui_videoWidget->hide();
            player->deleteLater();
            audioOutput->deleteLater();
        }
    });

    ui->ui_videoWidget->showFullScreen();
    player->play();
}

关键说明:

  • 提升组件时需确保项目中已包含QT += multimedia multimediawidgets模块(在.pro文件中添加)。
  • 若不需要关闭整个主窗口,可替换为隐藏视频组件的逻辑,灵活适配需求。

内容的提问来源于stack exchange,提问作者Almnayer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 11:45:32