QMediaPlayer не воспроизводится перед сном

Я делаю проект в Qt Designer и пытаюсь воспроизвести звук перед сном. У меня есть pushButton с 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);
}

Кто-нибудь знает, как это решить?


person David Tic Tac    schedule 25.04.2019    source источник


Ответы (1)


Вы блокируете основной цикл событий, засыпая, что приводит к воспроизведению, когда управление возвращается обратно в цикл событий. Вы никогда не должны блокировать основной цикл событий, иначе ваш пользовательский интерфейс и другие вещи будут зависать во время сна. Если вы действительно хотите подождать где-то в своем коде, лучше использовать локальный цикл событий и ждать там:

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

Но вы должны отметить, что это не очень хорошая практика, и вам лучше делать вещи асинхронными, используя сигналы и слоты.

person Nejat    schedule 25.04.2019