2014-08-28 72 views
1

我目前正在構建模型視圖體系結構,並遇到了無法在Internet上查找信息的問題。如何正確實現相同數據集的不同視圖選項

我有一組複雜的數據,即我要顯示給用戶在兩個(或更多)不同的方式:

  • 滿數據示
  • 只有選定的(局部的)的信息中顯示

打印這些數據的方式對我來說是無關緊要的,但如果這有助於它在表格視圖(基本信息)或列視圖(完整信息)中。這兩個類來自QT模型/視圖框架。

現在我雖然大約兩個選項來實現這一點,並想知道我應該用

選項1

  • 我建立我的數據結構,
  • 包括在自定義模式
  • 專門(子類)視圖類,以便只打印我被捕的東西。

選項2

  • 我建立我的數據結構,
  • 專注我的模型只提供獲取相關數據
  • 使用非標準以打印在屏幕上。

我會誠實地去選擇2,但看到在互聯網上使用選項1的情況下的金額我開始懷疑我是否做得對。 (當模型的多個視圖看起來相當頻繁時,我從未發現任何數據的雙重模型示例)

在視圖類中放置數據相關處理似乎對我來說是錯誤的,但是複製數據模型會導致重複數據(這也似乎是錯誤的)或共享數據(然後模型不再'保留'數據)

我也看過QT代表,但這些類大多是爲了改變數據的出現。我沒有找到使用委託忽略與一個視圖無關的數據的方法。

+0

它的重要意義是「選定的數據」。你的意思是忽略所有記錄中的一些列,忽略一些行或兩者? – RobbieE 2014-08-29 06:21:15

+0

從QT的角度來看,它既不是行也不是列,但是應該過濾掉的孩子元素。如果您願意,可以使用行的行,並添加Associated列數據。 – 2014-08-29 11:00:21

回答

0

你完全正確地認爲使用視圖來過濾數據是錯誤的。重新實現視圖的唯一原因是對相同數據或用戶事件的特殊處理有不同的視圖。

因此,有兩種方法可以篩選出一個數據:

1.創建兩款車型將共享數據。這是一種標準的recommended方法 - 不保留模型中的數據。

2.創建一個模型提供所有數據並創建一個代理模型,繼承自QSortFilterProxyModel以過濾出數據。

您將需要重新實現filterAcceptsColumn方法來過濾列,filterAcceptsRow過濾掉行。

然後用View-Model顯示所有數據或View-Proxy-Model顯示一些數據。

+0

感謝您的回答。我非常喜歡QSortFilterProxyModel類,我將會深入瞭解它。它看起來像一個雙模式方法的標準實施。我也很欣賞數據處理的鏈接,QT模型視圖文檔讓我誤以爲模型實際上應該「保留」數據。 – 2014-08-29 11:08:57

相關問題