QMediaPlayer 在睡眠前不播放

QMediaPlayer don't play before Sleep

我正在 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);
}

有人知道怎么解决吗?

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

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

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