我有QDialog
調用Dialog1
與兩個按鈕btnDialog2
和btnDialog3
。如何啓用QDialog1時QDialog2關閉按鈕
在點擊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;
上實現我的目標,任何幫助,將不勝感激!
簡單的解決方案:使用'QDialog :: exec()'而不是'QDialog :: show()'。複雜的解決方案:使用'QDialog :: accepted()'和'QDialog :: rejected()'信號。 –
或'finished()'或'done()'。正如@VioletGiraffe所指出的那樣,不要使用'QDialog :: show()',因爲它會將所有提到的信號排除,只有在對話框關閉時纔會觸發。隱藏不等於關閉。 – rbaleksandar
相反,不要使用'QDialog :: exec()',因爲事件循環的重入會產生僞同步代碼,垃圾堆棧等等。不需要它。請使用'QDialog :: show()',信號將被正確發射。 –