首页 > 解决方案 > QMediaPlayer 在睡眠前不播放

问题描述

我正在 Qt Designer 中制作一个项目,我正在尝试在睡眠前播放声音。我有一个带有 on_clicked 的按钮,它首先播放 QMediaPlayer,然后休眠 2 秒,但声音是在 2 秒之后而不是之前播放的。这是按钮上的代码:

void ScreenCombate::on_usar1_clicked()
{

    mediaplayer2 = new QMediaPlayer(this);
    mediaplayer2->setMedia(QUrl("qrc:/mini/sword.mp3"));
    mediaplayer2->setVolume(100);
    mediaplayer2->play();

    Sleep(1500);
}

有谁知道如何解决这个问题?

标签: c++qtqt-designerqmediaplayer

解决方案


您通过休眠来阻塞主事件循环,这会导致当控制返回事件循环时发生播放。你永远不应该阻塞主事件循环,否则你的 UI 和其他东西会在睡觉时冻结。如果您真的想在代码中的某个地方等待,最好使用本地事件循环并在那里等待:

QEventLoop loop;
QTimer timer;
QObject::connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit);
timer.start(1500);
loop.exec();

但是您应该注意,这不是一个好习惯,您最好使用信号和插槽使事情异步。


推荐阅读