2013-04-24 94 views
0

我設計了一個Qt用戶界面,並且具有相同型號(汽車)兩種不同的意見(QGraphicsObject類)。兩種觀點,一種模式:如何更新視圖當模型改變

當汽車的模型進行更新(在兩個中的一個小部件),我想雙方的意見進行更新(當然還有同樣適用於模型)。

直觀的方式做,這是更新的模式,並讓意見搭上「信號」或類似的東西,當發生這種情況,自我更新。我想知道這是一個推薦的行爲(在MVC中),因爲它迫使模型與其視圖有一些雙向連接(而在MVC模型中不應該有它的視圖列表)。

而且,什麼是在Qt來實現這個好辦法? (使用Qt的信號?提出一個標誌,當模型已被更改?)

回答

0

如何爲您的型號將會是什麼樣的?在Qt中,有一類表和樹狀列表類似,型號的標準API,該model-view programming。然而,它顯然不適用於你顯然使用的QGraphicsScene。你還沒有說出你想用於溝通的方式,或者你所建模的數據結構如何,所以很難說明你應該在這裏做什麼。也就是說,通常的MVC模式(與Qt中使用的QAbstractItemModel API相匹配)是讓模型通知任何附加視圖關於底層數據的任何更改;在Qt中,這是通過視圖連接的信號完成的。當視圖想修改數據時,他們調用模型上的方法。當模型接受修改時,它會發出標準信號,以便後續更新所有視圖。

+0

但是,我如何明確地將模型連接到Qt中的視圖?我其實只是認爲我的模型是我的視圖的一個屬性(一個自定義的''QGraphicsObject'')? – halflings 2013-04-24 14:46:03

+0

QAbstractItemModels可以通過setModel()連接到QAbstractItemView子類。但是,這是相當表/樹/列表特定的。如果你有更少的數據,而不是你希望監視的狀態變量(而不是列表等),那麼保存狀態併發送變化信號的模型包裝器QObject可能更適合。沒有任何模式可以捕獲所有用例,而是取決於您的模型類型。 – 2013-04-24 18:15:42

相關問題