如何禁用 Qt QMessageBox 播放的声音?
Posted
技术标签:
【中文标题】如何禁用 Qt QMessageBox 播放的声音?【英文标题】:How can I disable sounds played by Qt QMessageBox? 【发布时间】:2013-04-17 20:49:35 【问题描述】:我正在使用 Qt 4.8 开发一个使用
的 Windows 应用程序QMessageBox::information
QMessageBox::warning
...
当调用这些函数中的任何一个时,windows 默认播放声音。我的客户对此感到恼火,并希望在不更改 Windows 设置的情况下永久禁用此功能。
如果出现这种声音,我该如何消除?
我发现它是从
void QAccessible::updateAccessibility()
但我目前还没有找到禁用它的方法。
【问题讨论】:
我认为这是一个 Windows 功能。 不,声音是从 Qt 主动调用的。 我不这么认为,QMessageBox 根本没有提到声音,而且我很确定 QMessageBox 上没有声音,因为我禁用了 Windows 声音方案。 我在调试器中单步调试了源代码。声音在void QAccessible::updateAccessibility()中播放 在他们的文档中 QAccessible 中有一个 SoundPlayed 组件。至于消息框,我知道 QMessageBox 的静态方法调用会发出声音的原生消息框。尝试制作一个 QMessageBox 消息,使用它的属性设置它,然后在该对象上调用 .exec() 。据说可以有不同的音频结果。可能值得一试。 【参考方案1】:如果您使用不同的QMessageBox
、QMessageBox::about
,或创建自己的QMessageBox
实例并自己设置iconPixmap
和所有内容,则不应听到哔哔声。
QMessageBox::warning(0, "Test", "test"); // Plays alert
QMessageBox::about(0, "Test", "test"); // No sound, but no icon either
QMessageBox msgBox;
msgBox.setParent(0);
msgBox.setWindowTitle("Test");
msgBox.setText("test");
if(false)
msgBox.setIcon(QMessageBox::Warning);// makes sound
else
QPixmap p;
p.load("warning.png");
msgBox.setIconPixmap(p);// no sound, but with icon
msgBox.exec();
否则,要禁用警告声音,您可能需要在您的应用上使用global event filter 来捕捉来自QAccessibility
的任何事件/消息,角色为QAccessible::AlertMessage
。
希望对您有所帮助。
【讨论】:
您还需要调用msgBox.setStandardButtons(QMessageBox::Ok);
之类的方法来显示消息框。以上是关于如何禁用 Qt QMessageBox 播放的声音?的主要内容,如果未能解决你的问题,请参考以下文章