2012-06-18 62 views
0

我在QWizard中使用了一組QWizardPage類。除此之外,我有一個登錄對話框,它接收信息並從數據庫讀取數據。這個數據庫信息然後存儲在我創建的結構中。在小部件和嚮導頁面之間共享數據

我想避免緊耦合和全局數據(以及相應的單身人士),如果我能,因爲我想嘗試和開展東西的最佳方式。

現在首先我目前的應用程序的初始化期間創建的嚮導,並使用信號/時隙對發送的結構來嚮導。這當然意味着當我創建登錄表單時,嚮導必須存在。我想的另一種方法是向嚮導添加一個公共函數或更新構造函數。但是那意味着我需要在創建它們時將數據傳遞到嚮導頁面。有沒有更好的方式來做到這一點,也許沿相關部件的線這個問題:

的另一件事是,我的嚮導期間讀取的某些階段的數據庫信息。如果您使用registerField()這似乎是一個很好的方法來做到這一點,但我從數據庫中讀取的信息不存儲在小部件中,所以我看不到如何從其他頁面訪問這些數據。有沒有辦法做到這一點?

非常感謝

回答

1

有可能是一個更好的方式來做到這一點,但我沒有抓住過的是,我可以在我的代碼屬性,然後使用registerField對那些。這裏的例子非常簡單,但通過這樣做,我可以註冊任何我需要的東西。我認爲,如果你開始有更復雜的屬性,而不是「正常」類型,那麼它可能會更復雜一點。

Q_PROPERTY(int settingID READ getSettingID) 

public: 
    int getSettingID() const; 

然後在代碼:

registerField("test_setting", this, "settingID"); 

int TestSettingsWizardPage::getSettingID() const 
{ 
    // Return the value here 
} 
1

將GUI與應用程序的業務邏輯分開將是一個好主意。 您可以添加一個控制器類,它將處理對數據庫的請求,然後更新GUI。