我有一个带有 QDialogButtonBox 小部件的 QDialog,并且我已将按钮框接受的信号连接到我的 QDialog 子类中的插槽,如下所示:
void MyDialog::on_buttonBox_accepted()
{
QString errorString = this->inputErrorString();
if (errorString.isEmpty())
{
// Do work here
// code code code...
this->accept();
}
else
{
QMessageBox::critical(this, tr("Error"), tr("The following input errors have occurred:") + errorString);
}
}
但是,显示消息框后对话框关闭;显然按钮框自动将其接受的信号连接到 QDialog 的接受插槽(我想手动调用该插槽)。如何防止这种情况发生,以便我可以采取上述手动方法?
您可以实现MyDialog::accept()。该功能在QDialog中是虚拟的。
我可以通过断开 QDialog 构造函数中默认的 Accepted() 和 Rejected() 信号来实现此目的,而不是重写 MyDialog::accept() ,如下所示:
ui->buttonBox->disconnect(SIGNAL(accepted()), this);
ui->buttonBox->disconnect(SIGNAL(rejected()), this);