私はというDialog1
という2つのボタンbtnDialog2
とbtnDialog3
を持っています。それぞれのボタンは1 dialog1
が無効になり、dialog2
またはdialog3
が開かれた場合、期待通りにQDialog2が閉じるときにQDialog1のボタンを有効にする方法
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();
}
:btnDialog2
とbtnDialog3
をクリックすると
は、私は、次のコードの実行を持っています。
それぞれのダイアログが閉じると、dialog1
のボタンを再度有効にします。
注:私の目標を達成する上の任意のヘルプははるかに高く評価されるだろう
AltDialog *d2, *d3;
:
メインダイアログには、各ダイアログを表現するには、次の2つのプライベート変数を持っています!
単純な解決策: 'QDialog :: show()'の代わりに 'QDialog :: exec()'を使います。複雑な解決法: 'QDialog :: accepted()'と 'QDialog :: rejected()'シグナルを使います。 –
または 'finished()'または 'done()'です。 @VioletGiraffeは、QDialog :: show()を使わないことを指摘しています。これは、ダイアログが閉じたときにだけトリガーされる前述のすべてのシグナルの放出を止めるからです。非表示は終了と同じではありません。 – rbaleksandar
逆に、イベントループの再入力により擬似同期コードやスタックの廃棄などが発生するため、 'QDialog :: exec()'は使わないでください。 'QDialog :: show()'を使うと、シグナルが適切に出力されます。 –