Qt下QMessageBox的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt下QMessageBox的问题相关的知识,希望对你有一定的参考价值。

现在我在QT下要做一个闹钟程序,时间到了弹出对话框,然后循环播放音乐,你点击对话框的OK按钮的时候退出对话框并且关音乐。然后对话框是这样
void Window::dialogup()

QMessageBox::information(0,"Alarm","Warning:You set the time is now!");//对话框内容


void Window::comToCur()

if( QVariant(QTime::currentTime()).toString() == QVariant(TimeEdit1->time()).toString() )

QApplication::beep();
dialogup();

//设置的时间和系统时间对比,时间到了弹出对话框

然后播放音乐是
void Window::play()

QSound::play("./mysound/a.wav");


void Window::dialogdown()

QSound::stop("./mysound/a.wav");
//这两段估计还有错,这个是关闭对话框,音乐循环的部分还没写

我现在想利用QMessageBox弹出的OK按钮,点击他退出对话框并且关闭音乐,这个怎么实现。QMessageBox里面也没具体的对OK按钮的操作,刚学Qt不久编程能力也有限,各位帮帮忙(另外Qt下可以直接这样播放WAV音乐吗?为什么我调用Qapplication::beep()来用系统默认铃声的时候就没有什么声音响起来?)
还有可以的话帮我编改下实现音乐播放部分的代码。谢谢了
100分还只有一个回答,是有返回值,但是OK能做什么?点击下就退出了。。
3L大概就是这个意思啦,不过我决定不搞这个播放的功能了。谢谢了。

兄弟,你这个问题我以前遇到过。虽然没有具体的对OK按钮定义操作,但你其实可以自己定义。这样使用QMessageBox的时候就需要自己添加按钮,然后让他对应你自己dinghies的关闭音乐函数和退出函数。
QMessageBox msg;
msg.setText(tr("是否要退出音乐播放?"));
QAbstractButton *confirmButton = msg.addButton(tr("OK"), QMessageBox::ActionRole);
QAbstractButton *cancelButton = msg.addButton(tr("CANCEL"), QMessageBox::ActionRole);
msg.exec();
if(msg.clickedButton() == confirmButton)
//这里写你的关闭音乐播放函数
//退出函数


else
return;

你看是这个意思不?
参考技术A QMessageBox::information是有返回值的
int ret = QMessageBox::information(0, "My Application",
"The document has been modified.\n",
QMessageBox::Ok);
if ( ret == QMessageBox::Ok )
qDebug()<<"ok";
else
qDebug()<<"bad";
参考技术B 抢分,uP!!

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

【中文标题】如何禁用 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】:

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

否则,要禁用警告声音,您可能需要在您的应用上使用global event filter 来捕捉来自QAccessibility 的任何事件/消息,角色为QAccessible::AlertMessage

希望对您有所帮助。

【讨论】:

您还需要调用 msgBox.setStandardButtons(QMessageBox::Ok); 之类的方法来显示消息框。

以上是关于Qt下QMessageBox的问题的主要内容,如果未能解决你的问题,请参考以下文章

QMessageBox消息框的几种类型

Qt下QMessageBox的问题

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

QT QMessageBox 问题

Qt 5.1 - QMessageBox 错误?如果在隐藏 QDialog 时调用 QMessageBox,则程序退出(0)

qt5---QMessageBox消息框