QDialog 关闭时如何启用 QDialog 1 上的按钮

How to enable a button on QDialog1 when QDialog2 closes

我有一个名为 Dialog1QDialog,它有两个按钮 btnDialog2btnDialog3

单击 btnDialog2btnDialog3 我有以下代码 运行:

void Dialog1::on_btnDialog2_clicked()
{
    ui->btnDialog2->setEnabled(false);

    d2 = new AltDialog(this);
    d2->setWindowTitle("Dialog 2");
    d2->show();
}

void StockItems::on_btnDialog3_clicked()
{
    ui->btnDialog3->setEnabled(false);

    d3= new AltDialog(this);
    d3->setWindowTitle("Dialog 3");
    d3->show();
}

正如预期的那样,如果 dialog2dialog3 打开,它们各自的按钮一个 dialog1 将被禁用。

我想在各自的对话框关闭后重新启用 dialog1 上的按钮。

注:

主对话框有以下两个私有变量来表示每个对话框:

AltDialog *d2, *d3;

如果能帮助我实现目标,我将不胜感激!

您的应用程序需要在特定对话框关闭时收到通知。

您可以在 主对话框 中创建新插槽以接收来自 d2d3[=24 的信号=] 对话框;并连接,例如,void QDialog::finished(int result) 信号被新创建的插槽捕获:

d2 = new AltDialog(this);
connect(d2, &QDialog::finished, this, &YourMainDialog::d2Finished);
d2->setWindowTitle("Dialog 2");

...

void YourMainDialog::d2Finished(int result)
{
  ui->btnDialog2->setEnabled(true);
}

P.S。你需要知道 finished 信号 "is emitted when the dialog's result code has been set, either by the user or by calling done(), accept(), or reject()." 此外,您在每次按下按钮时都创建新的 AltDialog 对象看起来也不对。它似乎应该与信号连接一起移至 主对话框 的 "initialization" 方法。