2013-08-20 31 views
0

我目前有一個表單說A需要一些輸入。然而,爲了獲得輸入,另一種形式表示B需要填充。所以我想要的是,當用戶點擊formA中的一個按鈕,然後顯示formB。現在,當單擊表單B中的按鈕時,結果將返回到formA。做這個的最好方式是什麼。 ?目前我有一個formA,只是顯示錶格B,然後我卡住了。有什麼建議麼 ?打開另一個表單,然後等待該表單返回響應

回答

1

您可能需要從QDialog繼承formB,然後再致電exec()而不是show()

docs

顯示對話框作爲模態對話框,阻塞,直到用戶關閉它。該函數返回一個DialogCode結果。

如果對話框是應用程序模式,用戶將無法與同一應用程序中的任何其他窗口進行交互,直到它們關閉對話框。如果對話框是窗口模式,則只有在打開對話框時纔會阻止與父窗口的交互。默認情況下,該對話框是應用程序模式。

與此相結合,您可能需要使用QDialog::accept,在formBQDialog::rejectQDialog::setResult爲了打發導致的formA

0

考慮到您使用的是Qt,最簡單的方法是使用信號和插槽。當按下該按鈕時,您可以使FormB發出包含所需數據的信號。可以使FormA連接到這個信號並填寫它的形式。

此示例代碼是抽象的,但你應該能夠得到一般含義 -

void FormA::slotButtonClicked() { 
    FormB* b = new FormB(this); 
    connect(b, SIGNAL(requiredData(QVariant)), 
      this, SLOT(slotFormBData(QVariant()))); 

    // Logic to show form B 
} 

void FormA::slotFormBData(const QVariant& data) { 
    // Fill Form A fields with data 
} 

void FormB::slotButtonClicked() { 
    QString data = m_lineEdit->text(); 
    emit requiredData(data); 
} 

如果你不想上發射信號的所有數據,也可以使FormB發出done(FormB*)信號哪個FormA可以掛鉤,然後呼叫FormB的成員函數來獲取所有需要的數據。

相關問題