QMediaPlayer在睡眠之前无法播放

时间:2019-04-25 09:22:05

标签: c++ qt qt-designer qmediaplayer

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

有人知道如何解决吗?

1 个答案:

答案 0 :(得分:1)

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

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

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