QDialog 关闭时如何启用 QDialog 1 上的按钮
How to enable a button on QDialog1 when QDialog2 closes
我有一个名为 Dialog1
的 QDialog
,它有两个按钮 btnDialog2
和 btnDialog3
。
单击 btnDialog2
和 btnDialog3
我有以下代码 运行:
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();
}
正如预期的那样,如果 dialog2
或 dialog3
打开,它们各自的按钮一个 dialog1
将被禁用。
我想在各自的对话框关闭后重新启用 dialog1
上的按钮。
注:
主对话框有以下两个私有变量来表示每个对话框:
AltDialog *d2, *d3;
如果能帮助我实现目标,我将不胜感激!
您的应用程序需要在特定对话框关闭时收到通知。
您可以在 主对话框 中创建新插槽以接收来自 d2 和 d3[=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" 方法。
我有一个名为 Dialog1
的 QDialog
,它有两个按钮 btnDialog2
和 btnDialog3
。
单击 btnDialog2
和 btnDialog3
我有以下代码 运行:
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();
}
正如预期的那样,如果 dialog2
或 dialog3
打开,它们各自的按钮一个 dialog1
将被禁用。
我想在各自的对话框关闭后重新启用 dialog1
上的按钮。
注:
主对话框有以下两个私有变量来表示每个对话框:
AltDialog *d2, *d3;
如果能帮助我实现目标,我将不胜感激!
您的应用程序需要在特定对话框关闭时收到通知。
您可以在 主对话框 中创建新插槽以接收来自 d2 和 d3[=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" 方法。