2012-01-01 62 views
3

我正在尋找最佳實踐或設計模式來管理Qt應用程序的窗口。在Qt應用程序中是否有標準化的窗口管理方式?

讓我解釋一下我的意思。假設我有一個具有一些窗口(A,B,C)的應用程序,並且我需要在window B內打開window A,並確保每次調用時都會創建一個帶有有效參數的新實例window A,並且最後需要顯示如果有其他創建新實例,則窗口C會將現有實例放在前面。

當然,真實世界的應用程序要複雜得多,並且有更多的窗口和限制,所以我不想在整個代碼中傳播我的窗口管理操作,並將它們保存在一個靜態的WindowManager類中。 (其實這個類是一個單身,但我正在考慮把它變成一個靜態類)

窗口管理類包含一個(私人)QSharedPointer爲系統中的每個窗口,所以我可以很容易地從代碼的任何地方操控所有窗口。當我需要顯示window X時,我只需撥打WindowManager::showX(params),所有檢查和初始化都在該代碼中進行。此外,我有像WindowManager::minimizeX()方法來處理一些邏輯,顯示系統托盤消息,然後儘量減少窗口。

這是一種常見的需求,是否存在解決問題的一般模式?你們如何管理你的應用程序的窗口?我所做的(靜態WindowManager類)是否可以接受?


編輯:該應用程序是一個系統托盤應用程序,所以窗口之間沒有父子關係;相反,它們都是相互獨立的,一般用戶通過(全局)熱鍵調用任何窗口。然而,有一些情況是我需要打開另一個窗口,但仍然不能成爲父母和孩子。

+1

不能說我已經寫了任何如此複雜的東西。通常,具有各種對話的主窗口,模態或不需要。處理特定窗口的代碼進入該窗口的類。如果該窗口/對話框需要另一個對話框,它將管理所述對話框的設置,但邏輯全部在輔助對話框的類中。有什麼可以阻止你使用該模型嗎? – casualcoder 2012-01-02 03:20:47

+0

通常父母設立自己的孩子。創建子部件,配置它,啓動它。如果有主窗口,那個主窗口通常會處理許多次窗口。沒有看到可以將這麼多代碼分解成一個專門用於窗口創建和管理的獨立類,並且這將是一個很好的設計(單例幾乎從不)。 – 2012-01-02 06:36:02

+0

@casualcoder:實際上我的應用程序在其大部分時間駐留在系統托盤中,用戶通過不同的(全局)熱鍵觸發不同的窗口,並且窗口之間沒有父子關係。窗口可以在另一個窗口中調用或通過熱鍵打開。這導致我有這樣一個問題。 – destan 2012-01-02 07:25:20

回答

0

看起來這是一個簡單的日復一日的問題,因爲還沒有任何答案的問題?這對於評論來說太長了,所以我會將它作爲答案發布,但仍希望其他人發佈最終的通用啓蒙模式,但是;)我希望我有一個適合所有時間的一般模式。

無論如何,我不會把所有的東西都放到WindowManager中,因爲它在它和所有窗口之間創建了非常強的耦合。這個類可能會變得非常大,因爲它包含了所有複雜的規則(你所說的「真實世界的應用程序」 - 想象在一個類中處理100個窗口..)。它可能變得很難測試和容易出錯,因爲一個部分的變化可能會無意中影響其他部分(想象一個用於五個窗口的bool,翻轉它,它可能工作四次,而一個開始奇怪地行動)。有一天它可能會阻止你在別的地方重複使用某些窗口(比如在另一個程序中,或者僅僅在同一個程序的另一部分中),因爲它們需要WindowManager類,而WindowManager類又需要所有其他窗口,所以你不能移動這個窗口在別的地方,因爲它會拖動所有其他窗口。

我想嘗試創建窗口的邏輯組,並嘗試處理他們與幾個較小的控制器的交互。也許你可能想看看MVC模式。讓控制器決定如何操作模型以及根據用戶輸入顯示哪些視圖。

相關問題