似乎每當我嘗試將一個qt對話框屏幕「存儲」到一個靜態變量中,程序就會崩潰。 (有一個調試錯誤,抱怨在QMainApplication之前無法創建QPaintDevice)。靜態qt對話窗口不可能?
由於這個錯誤發生在主循環被輸入之前,我把它當作是靜態變量的問題。 (嗯,這是我自上次構建以來唯一添加的)。
讓我先試着解釋我如何使用它。基本上我有一棵樹(源自一些外部的-xml文件)。我希望顯示那棵樹的數據。然而,根據樹中的實際位置,數據必須以不同的方式繪製。 (使用完全不同的對話框)。
所以我開始創建一個靜態地圖。這張地圖將樹的「位置」(「regexified」,比如「a * c d」 - 空格表示分支)保存爲關鍵字。作爲價值,應該指出正確的對話。
第一個想法是簡單地使用指向對話框的指針。 (然後查找變量的函數只是執行對話框屏幕)。然而這導致了上面顯示的錯誤。
現在我開始使用中間代理函數,其中函數只是創建對話框並調用它。而靜態地圖只是一個指向這個函數的指針。喜歡的東西:
int AskGUIFn::GenStd(const GMProject::pTree& tOut, const GMProject::pTree& tIn) const {
std::unique_ptr<MW::GenStd> box(new MW::GenStd(&tOut, &tIn));
return box->exec();
}
然而,這似乎非常詳細(不只是做我必須創建所有的模態窗口,但我必須添加其他代理功能爲每個對話屏幕)。有沒有更乾淨的方法來做到這一點?我想阻止使用代理功能?
我相信在標題中的問題的答案是否定的,由於錯誤消息中給出的原因。我想知道爲什麼你不能只生產一個基於請求類型產生對話框的工廠? – kenrogers 2012-02-27 18:45:35
@kenrogers以及問題是我喜歡用qt設計器來創建對話界面.. – paul23 2012-02-27 19:28:59
這很好。您可以在設計器創建的對話框中調用「new MyCustomDialogX(...」)。 – kenrogers 2012-02-27 20:16:55