【发布时间】:2018-04-19 19:53:02
【问题描述】:
当事情发生时,我的程序会提醒用户。为了引起他的注意,会发出警报声。当用户输入内容以确认收据时,它会停止。
但是 QTextStream 输入会阻塞声音! 当我移除它时,声音播放完美。
此外,“警报”QSound 对象不起作用。播放的唯一方法是使用静态函数 QSound::play("file.wav")。但它无法停止。
这是我的代码:
#include <QCoreApplication>
#include <QSound>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
/*
QSound alert("../SoundAlerte/alert.wav");
alert.setLoops(QSound::Infinite);
alert.play();
*/
QSound::play("../SoundAlerte/alert.wav");
qDebug() << "ALERT";
qDebug() << "Enter Something to confirm receipt" ;
QTextStream s(stdin);
QString value = s.readLine();
qDebug() << "Received !";
//alert.stop();
qDebug() << "Sound stopped";
return a.exec();
}
好像不能同时播放声音和等待输入!
你知道如何进行吗?
谢谢
【问题讨论】:
-
我正在尝试查找
QSound::play是否为阻塞操作的信息。在readLine开始接受输入之前,声音是否会播放一次,直到 wav 文件结束?编辑:看看这个线程stackoverflow.com/questions/5600515/… -
声音播放一次,直到 wav 文件结束,但 在 readLine 接受输入之后,而不是之前。就像 readLine 的优先级高于 QSound::play()。
-
谢谢! QMediaPlayer 也可以!
#include <QtMultimedia/QMediaPlayer> QMediaPlayer *player = new QMediaPlayer; player->setMedia(QUrl::fromLocalFile("/path")); player->setVolume(50); player->play();