如何使QDialogButtonBox不关闭其父QDialog?

5

我有一个QDialog,内部包含一个QDialogButtonBox小部件,我将这个按钮框的accepted信号连接到了我的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的接受插槽(我想手动调用该插槽)。如何防止这种情况发生,以便我可以采取上述手动方法?


这个问题似乎有些模糊,你能否提供一个示例并发布完整的代码。 - Naruto
2个回答

14

您可以实现MyDialog::accept()函数。在QDialog中,该函数是虚函数。


在这个重载函数中调用QDialog::accept(); 来接受或返回; 以保持对话框的运行。 - Maziyar Mk

0

不是通过重写 MyDialog::accept() 方法,而是通过在 QDialog 构造函数中断开默认的 accepted() 和 rejected() 信号来实现这一点:

ui->buttonBox->disconnect(SIGNAL(accepted()), this);
ui->buttonBox->disconnect(SIGNAL(rejected()), this);

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