QT模型视图MVC系列教程(4)---角色role的使用(Qt::DisplayRole 类型)

模型正在维护的数据,不仅是视图中所看到的那些,还有很多数据在视图是被隐藏的,你看不到,不代表他没有,比如,一个列表视图中,不仅会显示文字,文字前可能还会显示一个图标。

也就是说,model会维护每一个单元格的数据,而且每个单元格的数据都是一个结构体:不仅包含了文字,还有文字的颜色、单元格的背景色、图标等等,还有很多,不一一列举了,到底有哪些呢,看一下枚举Qt::DisplayRole 就知道了,在QT5.10中,有22个,以后随着QT版本更新,这个值可能会变化。

因此,当视图View向模型Model索要数据时,不仅要提供索引 index,还必须要提供角色role。index和role共同决定出视图到底在向Model请求哪个数据。也就是说,在model的某个索引下,会指向至少22个数据,然后进一步地,由role来决定到底是这22个数据中的那一个。真正实现了数据/视图的分离。

下面我们来看一下视图View向模型Model索要数据的函数原型:

确实如此,只不过角色role有个默认值,调用者只需提供index即可从model中拿到数据,这个数据将被用于显示成文字,因为Qt::DisplayRole的作用就是索要文字。

下面我们把所有的角色枚举的功能,都翻译一下,列出来供大家查阅:

Qt::DisplayRole  默认值

0

视图的单元格一般状态下(例如初始化显示时,编辑完成时),要显示的数据。

 (QString)  这个是默认值,最重要的一个角色

Qt::DecorationRole

1

以图标的形式呈现为装饰的数据. (QColor, QIcon or QPixmap)

Qt::EditRole

2

当单元格(item)进入编辑态时(一般双击会进入编辑态),要显示的数据,

一般会将其返回值设置为和Qt::DisplayRole 一样 (QString),我后续博文《自定义模型》有示例用法

Qt::ToolTipRole

3

在该项的工具提示中显示的数据. (QString)

Qt::StatusTipRole

4

状态栏中显示的数据. (QString)

Qt::WhatsThisRole

5

“这是什么?”模式下要显示的问题. (QString)

Qt::SizeHintRole

13

该项在视图中的默认大小 (QSize)

Qt::FontRole

6

用于使用默认委托呈现的项目的字体. (QFont)

Qt::TextAlignmentRole

7

使用默认委托呈现的项的文本对齐方式. (Qt::Alignment)

Qt::BackgroundRole

8

用于使用默认代理渲染的项目的背景笔刷. (QBrush)

Qt::BackgroundColorRole

8

该值已淘汰。请改用BackgroundRole

Qt::ForegroundRole

9

用于使用默认代理渲染的项目的前景笔刷(通常为文本颜色). (QBrush)

Qt::TextColorRole

9

该值已淘汰

Qt::CheckStateRole

10

此角色用于获取项目的选中状态。. (Qt::CheckState)

Qt::InitialSortOrderRole

14

此角色用于获取标题视图节的初始排序顺序. (Qt::SortOrder). 至少 Qt 4.8.

Qt::AccessibleTextRole

11

可访问性扩展和插件(如屏幕阅读器)使用的文本。. (QString)

Qt::AccessibleDescriptionRole

12

出于可访问性目的对项目的描述 (QString)

Qt::UserRole

0x0100

第一个可用于特定应用程序目的的角色

你可能感兴趣的:(QT,QT/模型视图MVC,qt,mvc,开发语言)