官术网_书友最值得收藏!

2.1 模型/視圖簡介

在PySide6中,基于模型/視圖的控件采用了數據與顯示相分離的技術。這種技術起源于Smalltalk的設計模式——Model/View/Controller(MVC,模型/視圖/控制器),一般應用在顯示界面的程序中。與前者不同,PySide6主要采用了Model/View/Delegate(模型/視圖/代理)框架,簡稱為Model/View框架。

2.1.1 Model/View/Delegate框架

在PySide6中,可以使用Model/View/Delegate框架技術來顯示、處理不同類型的數據。Model/View/Delegate框架如圖2-1所示。

圖2-1 Model/View/Delegate框架

在Model/View/Delegate框架中,使用數據模型(Model)從數據源(Data)中讀、寫數據,使用視圖控件(View)顯示數據模型中獲取的數據。如果用戶要編輯數據,則可以使用代理控件(Delegate)編輯或修改數據,并將修改后的數據傳遞給數據模型(Model),PySide6的視圖控件提供了默認的代理控件,例如QTableView中提供了QLineEdit編輯框,所以Model/View/Delegate可以簡寫為Model/View框架。

在PySide6中,數據模型、視圖控件、代理控件通過信號/槽機制進行通信。

2.1.2 數據模型Model

PySide6提供了多種類型的數據模型,如圖2-2所示。

圖2-2 PySide6中的數據模型

在實際編程中會根據不同的功能選擇不同類型的數據模型。PySide6提供的數據模型類的功能見表2-1。

表2-1 PySide6提供的數據模型類

本章將重點講述QAbstractItemModel、QStringListModel、QStandardItemModel、QFileSystemModel。

2.1.3 視圖控件View

視圖控件是用來顯示數據模型的顯示控件,PySide6提供了多種視圖控件,如圖2-3所示。

在實際編程中會根據不同的功能選擇不同類型的視圖控件。PySide6提供的視圖控件類的功能見表2-2。

圖2-3 PySide6中的視圖控件

表2-2 PySide6提供的視圖控件類

本章將重點介紹QListView、QTableView、QTreeView的應用。

2.1.4 代理控件Delegate

代理控件就是視圖控件上為編輯數據提供的臨時編輯器。例如當在QTableView控件上編輯一個單元格的數據時,默認提供一個QLineEdit編輯框。代理控件負責從數據模型獲取相應的數據,并顯示在編輯器里,修改數據后可以將數據保存到數據模型中。

在PySide6中,QAbstractItemDelegate類是所有代理控件類的基類,是一個抽象類,不能直接使用。其子類QStyledItemDelegate類是PySide6中視圖控件類的默認代理控件類,默認提供QLineEdit類作為編輯器。如果開發者使用QComboBox、QSpinBox作為代理控件,則要繼承QStyledItemDelegate類創建自定義代理控件類。

2.1.5 數據項索引QModelIndex

在數據模型Model中,數據存儲的基本單元為item,每個item都對應了唯一的索引值(QModelIndex)。

在PySide6中,使用QModelIndex類表示數據索引,每個數據索引都有3個屬性,分別為行、列、父索引。對于一維數據模型只會用到行,例如列表;對于二維數據模型會用到行和列,例如Table;對于三維數據模型會用到行、列、父索引,例如樹。這3種數據如圖2-4所示。

圖2-4 不同的數據類型

在PySide6中,QModelIndex類的常用方法見表2-3。

表2-3 QModelIndex類的常用方法

2.1.6 抽象數據模型QAbstractItemModel

在PySide6中,QAbstractItemModel類為其他數據模型類的基類,該類提供了數據模型與視圖控件的數據接口。QAbstractItemModel類是抽象類,不能直接使用。QAbstractItemModel類的方法被其子類繼承。

QAbstractItemModel類的常用方法見表2-4。

表2-4 QAbstractItemModel類的常用方法

續表

在PySide6中,Qt.ItemDataRole的枚舉值見表2-5。

表2-5 Qt.ItemDataRole的枚舉值

在PySide6中,QAbstractItemModel類的信號也會被其子類繼承。QAbstractItemModel類的信號見表2-6。

表2-6 QAbstractItemModel類的信號

2.1.7 典型應用

前面介紹了模型/視圖的基礎知識,下面將通過例題來演示如何使用模型/視圖來創建控件,并顯示數據。

【實例2-1】 創建一個窗口,該窗口包含1個QListView視圖控件,該視圖控件將數據模型設置為QStringListModel,代碼如下:

運行結果如圖2-5所示。

圖2-5 代碼demo1.py的運行結果

注意:與QListWidget、QTableWidget、QTreeWidget創建的控件相同,可以通過雙擊視圖控件的文本來修改內容。

主站蜘蛛池模板: 屏东市| 建平县| 五莲县| 康平县| 江北区| 高邑县| 台江县| 治多县| 高雄市| 屯留县| 卓尼县| 崇阳县| 丰宁| 荔波县| 韶关市| 五台县| 鄂尔多斯市| 固原市| 女性| 灵川县| 且末县| 锦州市| 昭觉县| 京山县| 兴隆县| 海伦市| 湘潭市| 固始县| 成都市| 承德县| 新源县| 滨海县| 凤庆县| 临武县| 栾川县| 万载县| 许昌市| 黑山县| 南投县| 安泽县| 吉木萨尔县|