過去幾周我一直在努力尋找解決方案。我現在已經承諾了一個方向,但我仍然不完全滿意我所提出的。現在純粹出於好奇和希望下一次更合適的解決方案來提問。如何讓多個QAbstractItemModel類保持同步
如何保持多個QAbstractItemModel類同步,這些類引用的是相同的源數據,但在樹視圖中以不同方式顯示?
使用模型/視圖的主要原因之一是保持多個視圖彼此同步。但是,如果我的每個視圖都需要在同一列顯示不同的數據,就我所知,我需要將我的模型劃分爲兩個不同的模型,這些模型具有不同的實現,然後將迎合每個獨特的視圖顯示相同的項目。
底層的源項目是相同的,但顯示的數據是不同的。也許標誌也不同,以便用戶只能在一個視圖中選擇頂層項目,然後只能在另一個視圖中選擇子項目。
我會盡力舉一個例子:
比方說我TreeItem有三個屬性:A,B,C。
我有兩個樹視圖:TreeView1,TreeView2。每個都有兩列。
爲TreeView1顯示數據如下:列1 - >一,列2 - >乙
TreeView2顯示數據如下:列1 - >一,列2 - > C^
我然後需要創建兩個不同的模型,一個用於TreeView1,一個用於TreeView2,併爲每個適當地覆蓋數據和標誌方法。
由於它們現在是不同的模型,即使它們都在後臺引用相同的TreeItem,它們也不再保持同步。每當我在TreeView1上更改數據時,我都必須手動調用TreeView2上的刷新,反之亦然。
考慮到column1或屬性a是可編輯的並允許用戶設置TreeItem的名稱。希望的行爲是在TreeView1中完成的編輯立即反映在TreeView2中。
我覺得我錯過了一些重要的設計模式或什麼時候接近這個。任何人都可以看到我出錯的地方並糾正我嗎?或者這是一個正確的解釋?
謝謝!
有趣。我一直在計劃沿着這些線做一些事情(使用QSortFilterProxyModel),儘管只是根據視圖過濾掉某些項目。儘管如此,我仍然會重複基礎模型。聽起來就像我應該進一步研究代理模型以更好地理解它們。 – Mathieson 2015-03-18 21:33:30
@Mathieson代理模型幾乎是一個沒有gui的視圖,而是一個模型API來代替gui。將代理看作是機器可讀的視圖,它同意機器可讀的API也是模型的API。 – 2015-03-18 22:08:43
你有什麼好的資源可以鏈接到完成這個或一些良好實現的例子嗎?這是迄今爲止我所發現的關於這個主題的最好的報告http://imaginativethinking.ca/use-qt-qsortfilterproxymodel/ – Mathieson 2015-03-18 22:53:30