2010-04-14 258 views
0

我正在構建一個包含大約30個不同視圖(QWidgets)的Qt應用程序。我的想法是使用QStackedWidget來輕鬆切換應用程序中的不同視圖。我有兩種不同的解決方案來實現這一點,並在用戶瀏覽應用程序時使用盡可能少的內存。Qt:QStackedWidget解決方案

解決方案1: 每次我需要顯示一個視圖時,我會檢查它是否已經在堆棧中。 (用戶可能會多次打開相同的視圖,也可能是顯示數據庫中項目的視圖)。如果視圖已經在堆棧中了,它不需要再次創建,我只能顯示視圖。

這個解決方案的好處是我重用視圖(小部件),所以他們只需要創建一次。這很好,因爲每次用戶顯示視圖時UI和其他內容都應該看起來相同,爲什麼不重用呢?這個解決方案的問題是每個視圖都有兒童。也許是一個對象,一個帶有對象或其他東西的QList。 Qt的一個好處是你可以使用父子機制,這樣當父對象被刪除時,子對象將被刪除。因爲我從不刪除父視圖(視圖),所以我需要自己處理,因爲當顯示視圖時,可能需要從不同的時間刪除子視圖。 (也許視圖顯示一個包含對象的列表,並且每次顯示視圖時都應該從數據庫更新列表)。

解決方案2: 每次我需要顯示QWidget時,我都會創建一個新的並顯示它。當它不再顯示時,我從內存中刪除它。

這是一個相當簡單的解決方案。而當我刪除視圖時,他們沒有顯示視圖和它的孩子應該從內存中刪除,所以它不應該增加內存,我說得對嗎?

您推薦哪種解決方案?

回答

2

如果內存是,那麼緊,它可能是最好的只是根據需要實例化和刪除。

如果您遵循MVC類型的體系結構,那麼您的數據模型應該與您的視圖不同,因此QWidget類在不使用時不應保留對數據模型的引用。也就是說,當你的QWidget類不再需要的時候,你可以保持它的實例化,但對數據模型的引用「無效」(我認爲它是管理它自己的內存)。

+0

謝謝!它適用於Symbian操作系統,因此內存可能並不那麼緊密,但只是想選擇最適合的解決方案。 – Martin 2010-04-14 18:48:40

+0

然後,我會選擇#2,因爲它似乎是最簡單的。如果性能成爲問題,您可以稍後重新訪問(分析後)。 – metasim 2010-04-14 21:34:35

+0

我嘗試過使用這兩種解決方案。第一個速度非常快,但第二個速度非常快,而第二個速度對我選擇的第二個內存更好。謝謝你的幫助! – Martin 2010-04-16 09:50:50