我正在尋找最佳實踐或設計模式來管理Qt應用程序的窗口。在Qt應用程序中是否有標準化的窗口管理方式?
讓我解釋一下我的意思。假設我有一個具有一些窗口(A,B,C)的應用程序,並且我需要在window B
內打開window A
,並確保每次調用時都會創建一個帶有有效參數的新實例window A
,並且最後需要顯示如果有其他創建新實例,則窗口C會將現有實例放在前面。
當然,真實世界的應用程序要複雜得多,並且有更多的窗口和限制,所以我不想在整個代碼中傳播我的窗口管理操作,並將它們保存在一個靜態的WindowManager
類中。 (其實這個類是一個單身,但我正在考慮把它變成一個靜態類)
窗口管理類包含一個(私人)QSharedPointer
爲系統中的每個窗口,所以我可以很容易地從代碼的任何地方操控所有窗口。當我需要顯示window X
時,我只需撥打WindowManager::showX(params)
,所有檢查和初始化都在該代碼中進行。此外,我有像WindowManager::minimizeX()
方法來處理一些邏輯,顯示系統托盤消息,然後儘量減少窗口。
這是一種常見的需求,是否存在解決問題的一般模式?你們如何管理你的應用程序的窗口?我所做的(靜態WindowManager類)是否可以接受?
編輯:該應用程序是一個系統托盤應用程序,所以窗口之間沒有父子關係;相反,它們都是相互獨立的,一般用戶通過(全局)熱鍵調用任何窗口。然而,有一些情況是我需要打開另一個窗口,但仍然不能成爲父母和孩子。
不能說我已經寫了任何如此複雜的東西。通常,具有各種對話的主窗口,模態或不需要。處理特定窗口的代碼進入該窗口的類。如果該窗口/對話框需要另一個對話框,它將管理所述對話框的設置,但邏輯全部在輔助對話框的類中。有什麼可以阻止你使用該模型嗎? – casualcoder 2012-01-02 03:20:47
通常父母設立自己的孩子。創建子部件,配置它,啓動它。如果有主窗口,那個主窗口通常會處理許多次窗口。沒有看到可以將這麼多代碼分解成一個專門用於窗口創建和管理的獨立類,並且這將是一個很好的設計(單例幾乎從不)。 – 2012-01-02 06:36:02
@casualcoder:實際上我的應用程序在其大部分時間駐留在系統托盤中,用戶通過不同的(全局)熱鍵觸發不同的窗口,並且窗口之間沒有父子關係。窗口可以在另一個窗口中調用或通過熱鍵打開。這導致我有這樣一個問題。 – destan 2012-01-02 07:25:20