QMediaPlayer 在睡眠前不播放

Posted

技术标签:

【中文标题】QMediaPlayer 在睡眠前不播放【英文标题】:QMediaPlayer don't play before Sleep 【发布时间】:2019-04-25 09:22:05 【问题描述】:

我正在 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】:

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

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

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

【讨论】:

以上是关于QMediaPlayer 在睡眠前不播放的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 QMediaPlayer 播放流媒体音频?

哪些视频文件可以在 Android 上播放 QMediaPlayer?

Qt系列文章之二十六(基于QMediaPlayer 在 QVideoWidget或QGraphicsVideoItem 组件上播放视频)

Qt系列文章之二十六(基于QMediaPlayer 在 QVideoWidget或QGraphicsVideoItem 组件上播放视频)

在 X 位置停止从 QMediaPlayer 播放视频

无法从其他线程播放 QMediaPlayer