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

tob*_*obi 6 c++ qt

我在 QMessageBox 上有 3 个按钮,由 QMessageBox::addButton() 方法添加。如果单击了按钮,是否可以防止关闭消息框?默认每个按钮都会关闭窗口,但我不想为一个按钮执行此操作。

编辑:为什么这是downvoted?

Alb*_*t H 6

对我有用的一种有趣的方法是完全断开创建的目标按钮的信号,然后重新添加预期的功能。这并不适合所有人,特别是如果按钮不是以这种方式创建的和/或您仍然想正确关闭对话框。QDialog::accept(可能有一种方法可以将其添加回来和/或使用, QDialog::reject, QDialog::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!"); });
Run Code Online (Sandbox Code Playgroud)


Bal*_*des 1

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

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