標籤:
MVC視圖和控制器對象相結合,其結果是模型/視圖結構,仍然分離了資料與呈現給使用者的方式,使得它可以在幾個不同的視圖中顯示相同的資料,並實現新類型的視圖而無需改變底層的資料結構。為了靈活的處理資料輸入,則引入委託的概念。在此架構中引入委託的有點事:允許項目資料顯示和自訂編輯。
模型與資料來源進行通訊,在這個體繫結構中為其它組件提供了一個介面。通訊的性質依賴於資料來源的類型以及模型的實現方式。
視圖從模型中得到模型索引,這些都是引用到資料項目。通過為模型提供模型索引,視圖可以從資料遠中檢索資料項目。
在標準的視圖裡,委託呈現資料項目。當一個項目被編輯,委託和模型直接利用模型索引進行通訊。
模型、視圖、委託使用訊號和槽相互連信
模型
所有模型都是基於QAbstractItemModel類。這個類定義了一個使用視圖和委託來訪問資料的介面,QAbstractListModel和QAbstractTableModel
Qt提供了一些現成的模型,可以用來處理資料項目:
QStringListModel,QStandardItemModel,QFileSystemModel,
視圖
基於QAbstractItemView抽象基類,QListView,QTableView,QTreeView
委託
QAbstractItemDelegate在模型/視圖架構中代表抽象的基類。預設的委託有QStyledItemDelegate提供,這被Qt的標準視圖用作預設的委託。然而,QStyledItemDelegate和QItemDelegate獨立代替繪畫,且為視圖提供編輯器。它們之間的區別在於QStyledItemDelegate使用當前樣式來繪製項目。
Model indexes
視圖和委託通過模型索引來請求顯示的資料項目,模型只需要知道如何擷取資料,並通過模型管理的資料的類型可以被相當普遍的定義。
臨時模型索引由QModelIndex類提供,持久性模型索引由QPersistentModeIndex類提供,取得對應於資料項目的模型索引,模型中必須制定三個屬性:一個行號,一個列號,以及父項的模型索引
項目角色
模型中的項目可以為其它組件演繹不同的角色,允許為不同的情況提供不同類型的資料。通常情況下,包含資料的項目用於若干不同的角色,且標準角色被QT::ItemDataRole定義
我們可以通過模型索引傳遞給項目的項目向模型請求項目資料,並通過指定一個角色來擷取想要的資料類型
資料類型被稱為模型的角色指標。視圖可以以不同的方式顯示角色,因此,為每個角色提供相應的資訊非常重要。
委託
控制委託的標準介面在QAbstractItemDelegate類中定義,Qt提供的標準視圖中使用QItemDelegate。委託介面的預設實現以一貫風格來呈現項目為每個標準視圖:QListView、QTableView、QTreeView。
所有標準角色由所使用的標準視圖中的預設委託處理。
Qt模型/視圖、委託