C++ QMediaPlayer don';睡觉前不要玩

C++ QMediaPlayer don';睡觉前不要玩,c++,qt,qt-designer,qmediaplayer,C++,Qt,Qt Designer,Qmediaplayer,我正在做一个Qt Designer项目,我想在睡觉前播放声音。我有一个按钮,上面点击了一个on_,它首先播放QMediaPlayer,然后休眠2秒钟,但是声音是在2秒钟之后播放的,而不是之前。这是按钮上的代码: void ScreenCombate::on_usar1_clicked() { mediaplayer2 = new QMediaPlayer(this); mediaplayer2->setMedia(QUrl("qrc:/mini/sword.mp3"));

我正在做一个Qt Designer项目,我想在睡觉前播放声音。我有一个按钮,上面点击了一个on_,它首先播放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);
}

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

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

QEventLoop loop;
QTimer timer;
QObject::connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit);
timer.start(1500);
loop.exec();
但您应该注意,这不是一个好的实践,最好使用信号和插槽使事情异步