c++ - QMediaPlayer 在睡眠前不播放
问题描述
我正在 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);
}
有谁知道如何解决这个问题?
解决方案
您通过休眠来阻塞主事件循环,这会导致当控制返回事件循环时发生播放。你永远不应该阻塞主事件循环,否则你的 UI 和其他东西会在睡觉时冻结。如果您真的想在代码中的某个地方等待,最好使用本地事件循环并在那里等待:
QEventLoop loop;
QTimer timer;
QObject::connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit);
timer.start(1500);
loop.exec();
但是您应该注意,这不是一个好习惯,您最好使用信号和插槽使事情异步。
推荐阅读
- excel - 如何将数据放入regionMap?
- c# - c# 检查datagridview列是否包含值& linq First() vs FirstOrDefault()
- r - 将向量中的多个值粘贴到数据框列中
- c# - Databricks API 2.0 - 集群获取响应 - TEMPORARILY_UNAVAILABLE
- r - 为什么我必须写手段[i] 而不仅仅是手段。我不是编程背景
- python-3.x - 为什么我不能使用 protoc 通过 --python3_out 生成具有 Any 类型字段的 Python3 对象,只有 --python_out 有效
- reactjs - 为什么我得到 [object object ]
- c++ - 对 ostream 类对象的 const 引用
- java - Flux.buffer() 不适用于 switchIfEmpty
- jenkins - 在詹金斯管道中创建动态阶段在第一次循环执行时失败?