2014-01-11 25 views
-1

我正在使用qt-creator來構建一個小QT應用程序。QDialog接受返回自定義類對象

我有一個主窗口,我有一些像「新聯繫人」按鈕的控件。 顯示QDialog按鈕,它包含3行編輯:姓名,手機和電子郵件。

該對話框通過信號/插槽系統顯示。它工作正常,但我想創建一個Contact對象,當單擊OK時,我想將該Contact添加到我的主窗口,以便將它放入在主窗口代碼中創建的QList中。

其做法是: 的QMainWindow - >新的聯繫人 - >了QDialog示

QDialog的 - >確定 - >的QMainWindow

我應該從主窗口傳遞的QList到QDialog的作爲參數或有是最好的方式?

+0

這是一年後仍未解決? – lpapp

回答

0

我應該將QList從主窗口傳遞給QDialog作爲參數還是有最佳方法?

在我看來,最好的將是一個自定義的QDialog子類有三個QLabel秒和3 QLineEdit秒。

標籤將得到以下類型的值:

  • 標籤1:命名

  • 標籤2:移動電話號碼

  • 標籤3:電子郵件

您可以使用QLabels和QLineEdits將它們與輸入一起顯示來自用戶。

然後,你的程序可能已經做了,分別處理「accept」事件。你可以用下面的方法來獲取最終用戶輸入的文本:

text : QString

這個屬性保存行編輯的文本。

設置此屬性將清除選擇內容,清除撤消/重做歷史記錄,將光標移動到行尾並將修改後的屬性重置爲false。使用setText()插入時,文本未經驗證。

該文本被截斷爲maxLength()長度。

默認情況下,此屬性包含一個空字符串。

然後,在accepted signal的處理程序,你可以召喚3種存取方法,如:

  • 即QString名()const的{返回nameLineEdit->文本(); }

  • QString mobileNumber()const {return mobileNumberLineEdit-> text(); }

  • QString email()const {return emailLineEdit-> text(); }

你也可以存儲在一個專門的結構取決於你建立你的數據表示,這樣的結構是這樣的:

struct Contact { 
    QString name; 
    QString mobileNumber; 
    QString email; 
}; 

,然後你會爲這個訪問如下

Contact contact() const; 
+0

好吧我試圖簡短但可能忘記了一些重要的細節。 1)在QDialog中我有標籤和線條編輯。 2)在按鈕接受的處理程序中,我從對話框中獲取QStrings 問題是如何將3個值返回給主窗口,因爲打開對話框的主窗口的操作觸發方法會在對話框結束時立即結束被顯示。 – user1638466

+0

@ user1638466:這取決於你想要對這些值做什麼。您可以將它們存儲在成員變量中,稍後您可以從對話框本身訪問它,而不會破壞它,隱藏或將它分配給主窗口或應用程序的另一個組件等。您提出的問題太廣泛了。 :) – lpapp

+0

以及我知道......其實我也想在QT論壇上得到一些幫助,我希望能夠解決這個問題,我甚至會在這裏發佈解決方案;) – user1638466

0

做一個QDialog的子類。調用Yourclass :: exec()來顯示對話框(exec是QDialog中的一個函數),然後再用Yourclass :: contactDetails()來獲取它們。 contactDetails是一個非常普通的成員函數,你必須編寫它。

相關問題