Qt模型/視圖、委託

來源:互聯網
上載者:User

標籤:

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模型/視圖、委託

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.