0. 前言
上一篇文章梳理了Model
相关类的UML图,介绍了Model
类是如何通过QModelIndex
类来索引数据的,以及QModelIndex
拥有的强大表示能力,能够实现对矩阵模型、树模型的数据结构的表示。
我自己都有些按捺不住想要写如何写自己的Model
类的内容了,但是还差临门一脚,需要再介绍一下今天的主人公:ItemDataRole
。
它是Qt命名空间内的一个枚举类型,而且之前的教程中从未出现,但它又是下手编码之前必须要掌握的内容,本文来简单探究一下它~
系列文章回顾:
Qt Model/View 学习(1) - 是什么和为什么?
Qt Model/View 学习(2) - QModelIndex索引模型数据
1. 为什么需要Role
Qt::ItemDataRole
的出现稍显突然。但它作为一个枚举类型,理解起来是十分简单的。
上一篇文章中我们讲到可以通过QModelIndex
来索引Model
中的数据,这里的数据可以是很散漫、毫无结构的。不过这是对于Model
与Data
打交道的场合。
当Model
与View
打交道时,数据的概念就不仅仅是Data
中的内容了。就像Excel
表格中,每个单元格填入的文字内容是Data
,但每个单元格还有其它属性,比如:加粗、斜体、颜色……
在Model
中提供了索引QModelIndex
之后,结果将指向一个数据群,该数据群包含了数据本身、字体、颜色、背景色等等,这些都是View
在显示时所需要的,所以需要Qt::ItemDataRole
与QModelIndex
配合确定所需要的的数据。
当然似乎也可以采用各种接口来获取各种数据,但这并不是贯彻面向对象思想的Qt所采用的方式。
2. 有哪些Role
用得最多的莫过于Qt::DisplayRole
和Qt::EditRole
了,前者用于读取数据,后者编辑数据。激进一点的话,看到这里就已经可以去实现自己的Model
类了。
常用一些的Role
见下表:
enum | 值 | 描述 | 数据类型 |
---|---|---|---|
Qt::DisplayRole | 0 | 显示数据 | QString |
Qt::EditRole | 2 | 编辑数据 | QString |
Qt::FontRole | 6 | 显示数据时的字体 | QFont |
Qt::TextAlignmentRole | 7 | 对齐方式 | Qt::Alignment |
Qt::BackgroundRole | 8 | 显示背景色 | QBrush |
Qt::ForegroundRole | 9 | 显示前景色,如字体颜色 | QBrush |
完整列表请参考官方文档,可在Assistant
中搜索Qt::ItemDataRole
,此处给出枚举值贴图。
3. 小结
QModelIndex
能够索引数据,但是对于View
而言,数据的种类更多,所以需要枚举类型Qt::ItemDataRole
进行区分;Qt::DisplayRole
用于显示数据,Qt::EditRole
用于编辑数据;
如有错误欢迎指正,共同进步~
今天你学废了吗?