QMediaPlayer не играет перед сном - PullRequest
1 голос
/ 25 апреля 2019

Я делаю проект в 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);
}

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

1 Ответ

1 голос
/ 25 апреля 2019

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

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

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

...