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

  • Post author:
  • Post category:其他





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. 小结


  1. QModelIndex

    能够索引数据,但是对于

    View

    而言,

    数据的种类更多

    ,所以需要枚举类型

    Qt::ItemDataRole

    进行区分;

  2. Qt::DisplayRole

    用于显示数据,

    Qt::EditRole

    用于编辑数据;

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


今天你学废了吗?



版权声明:本文为Copperxcx原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。