我正在Qt Designer中做一个proyect,我想在睡眠之前播放声音。我有一个带有on_clicked的按钮,它首先在其中播放QMediaPlayer,然后睡眠2秒钟,但是声音在2秒钟之后而不是之前播放。这是pushButton上的代码:
void ScreenCombate::on_usar1_clicked()
{
mediaplayer2 = new QMediaPlayer(this);
mediaplayer2->setMedia(QUrl("qrc:/mini/sword.mp3"));
mediaplayer2->setVolume(100);
mediaplayer2->play();
Sleep(1500);
}
有人知道如何解决吗?
答案 0 :(得分:1)
您正在通过睡眠来阻塞主事件循环,这会导致在控制权返回事件循环时发生播放。您永远不应阻止主事件循环,否则您的UI和其他内容在睡眠时会冻结。如果您真的想在代码中的某个地方等待,最好使用本地事件循环并在那里等待:
QEventLoop loop;
QTimer timer;
QObject::connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit);
timer.start(1500);
loop.exec();
但是您应该注意,这不是一个好习惯,最好使用信号和插槽使事情异步。