Qt Model/View 学习(3) - 索引来一堆东西,究竟取谁(ItemDataRole)?


0. 前言

上一篇文章梳理了Model相关类的UML图,介绍了Model类是如何通过QModelIndex类来索引数据的,以及QModelIndex拥有的强大表示能力,能够实现对矩阵模型、树模型的数据结构的表示。

我自己都有些按捺不住想要写如何写自己的Model的内容了,但是还差临门一脚,需要再介绍一下今天的主人公:ItemDataRole

它是Qt命名空间内的一个枚举类型,而且之前的教程中从未出现,但它又是下手编码之前必须要掌握的内容,本文来简单探究一下它~

系列文章回顾
Qt Model/View 学习(1) - 是什么和为什么?
Qt Model/View 学习(2) - QModelIndex索引模型数据


1. 为什么需要Role

Qt::ItemDataRole的出现稍显突然。但它作为一个枚举类型,理解起来是十分简单的。

上一篇文章中我们讲到可以通过QModelIndex来索引Model中的数据,这里的数据可以是很散漫、毫无结构的。不过这是对于ModelData打交道的场合。

ModelView打交道时,数据的概念就不仅仅是Data中的内容了。就像Excel表格中,每个单元格填入的文字内容Data,但每个单元格还有其它属性,比如:加粗斜体、颜色……

Model中提供了索引QModelIndex之后,结果将指向一个数据群,该数据群包含了数据本身、字体、颜色、背景色等等,这些都是View在显示时所需要的,所以需要Qt::ItemDataRoleQModelIndex配合确定所需要的的数据。

当然似乎也可以采用各种接口来获取各种数据,但这并不是贯彻面向对象思想的Qt所采用的方式。


2. 有哪些Role

用得最多的莫过于Qt::DisplayRoleQt::EditRole了,前者用于读取数据,后者编辑数据。激进一点的话,看到这里就已经可以去实现自己的Model类了。

常用一些的Role见下表:

enum描述数据类型
Qt::DisplayRole0显示数据QString
Qt::EditRole2编辑数据QString
Qt::FontRole6显示数据时的字体QFont
Qt::TextAlignmentRole7对齐方式Qt::Alignment
Qt::BackgroundRole8显示背景色QBrush
Qt::ForegroundRole9显示前景色,如字体颜色QBrush

完整列表请参考官方文档,可在Assistant中搜索Qt::ItemDataRole,此处给出枚举值贴图。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


3. 小结

  1. QModelIndex能够索引数据,但是对于View而言,数据的种类更多,所以需要枚举类型Qt::ItemDataRole进行区分;
  2. Qt::DisplayRole用于显示数据,Qt::EditRole用于编辑数据;

如有错误欢迎指正,共同进步~


今天你学废了吗?

  • 14
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值