单击按钮后如何防止关闭QMessageBox

时间:2012-09-01 19:13:01

标签: c++ qt

我在QMessageBox上添加了3个按钮,由QMessageBox :: addButton()方法添加。如果单击按钮,是否可以阻止关闭消息框?通过defult每个按钮关闭窗口,但我不想一个按钮。

编辑: 为什么这会被贬低?

4 个答案:

答案 0 :(得分:3)

如果您可以获得指向QMessageBox窗口小部件的指针,则可以尝试在其上安装QObject::eventFilter来过滤QEvent::Close

答案 1 :(得分:3)

我遇到了同样的问题,但我想添加一个复选框,即使将ButtonRole设置为QMessageBox::ActionRole(也尝试了其他人),它仍然会点击关闭对话框。对于这种情况,我刚刚在blockSignals(true)上调用QCheckBox,现在它允许检查/取消选中行为而不关闭对话框。幸运的是,QCheckBox在没有信号的情况下正常工作,但假设您需要来自按钮的信号。

他们应该添加一个不会关闭对话框的新角色,因为为简单的自定义项派生类很难。

答案 2 :(得分:1)

我浏览了addButton()函数重载,但是使用此方法添加的按钮没有自定义行为。它们的行为就像消息框上的标准按钮一样。

但是,如果您想创建一个完全可自定义的对话框,那么您最好的选择是扩展QDialog类并使用您喜欢的任何控件。

答案 3 :(得分:1)

对我有用的一种有趣的方法是完全断开所创建的目标按钮的信号,然后重新添加预期的功能。这对每个人都不起作用,特别是如果按钮没有以这种方式创建和/或您仍然想要正确关闭对话框。 (可能有办法将其添加回来和/或使用QDialog::acceptQDialog::rejectQDialog::done模拟行为,但尚未尝试过。)

示例:

QMessageBox *msgBox = new QMessageBox(this);
QAbstractButton *doNotCloseButton = msgBox->addButton(tr("This button will not close anything"), QMessageBox::ActionRole);
// Disconnect all events - this will prevent the button from closing the dialog
doNotCloseButton->disconnect();
connect(doNotCloseButton, &QAbstractButton::clicked, this, [=](){ doNotCloseButton->setText("See? Still open!"); });