如何禁用Qt QMessageBox播放的声音?

6

我正在使用Qt 4.8开发一个Windows应用程序,该应用程序使用

QMessageBox::information
QMessageBox::warning
...

当任何一个这些函数被调用时,Windows 会默认播放声音。我的客户们对此感到烦恼,希望永久禁用这个功能,但不改变 Windows 设置。
我该如何消除这个声音?
我发现这个声音是从以下位置调用的。
void QAccessible::updateAccessibility()

但是我目前还没有看到禁用它的方法。

我认为这是一个Windows功能。 - dtech
1
不,声音是从Qt中主动调用的。 - RED SOFT ADAIR
我不这么认为,QMessageBox根本没有提到声音,而且我非常确定在QMessageBox上不会有声音,因为我已经禁用了Windows的声音方案。 - dtech
1
我在调试器中逐步查看了源代码。声音是在void QAccessible :: updateAccessibility()中播放的。 - RED SOFT ADAIR
文档中QAccessible组件中有一个名为SoundPlayed的组件。关于消息框,我知道QMessageBox的静态方法调用本地消息框会发出声音。尝试创建QMessageBox消息,设置其属性,然后在该对象上调用.exec()。据说音频效果可能会有所不同。这值得一试。 - Nick P
显示剩余2条评论
1个回答

6

如果您使用不同的QMessageBoxQMessageBox::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();

否则,如果想要禁止警告声音,您可能需要在应用程序中使用全局事件过滤器来捕获任何带有 QAccessible :: AlertMessage 角色的 QAccessibility 消息/事件。

希望这有所帮助。


你还需要调用类似 msgBox.setStandardButtons(QMessageBox::Ok); 的代码来显示消息框。 - ulatekh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接