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用于编辑数据;
如有错误欢迎指正,共同进步~
今天你学废了吗?
本文介绍了Qt中的ItemDataRole概念,解释了为何需要Role及它们在Model与View交互中的作用。重点探讨了Qt::DisplayRole和Qt::EditRole,并列举了一些常用的Role。
1万+

被折叠的 条评论
为什么被折叠?



