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

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

  • 19
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
`Qt::DisplayRole` 是一个枚举常量,定义了Qt中的模型/视图架构中的一个重要角色,用于表示数据项在视图中的显示。在Qt模型/视图架构中,数据项可以有多个角色,例如 `Qt::EditRole`、`Qt::ToolTipRole` 等等,而 `Qt::DisplayRole` 是其中最常用的一个,它表示数据项在视图中的文本显示。 当视图需要显示数据时,它会从数据模型中获取数据项,并使用 `Qt::DisplayRole` 角色来获取数据项的文本表示。默认情况下,如果数据项没有定义 `Qt::DisplayRole` 角色,则视图使用 `Qt::UserRole` 角色来获取数据项的文本表示。 例如,在使用 `QStandardItemModel` 时,可以使用 `QStandardItem` 类的 `setData()` 函数来设置数据项的值和角色,如下所示: ``` QStandardItemModel *model = new QStandardItemModel(); QStandardItem *item = new QStandardItem("Hello World"); item->setData("This is a tooltip", Qt::ToolTipRole); model->setItem(0, 0, item); ``` 在上面的代码中,我们使用 `setData()` 函数将数据项的值设置为 "Hello World",并将该数据项的 `Qt::ToolTipRole` 角色设置为 "This is a tooltip"。如果我们将该数据项添加到一个视图中并显示它,视图使用 `Qt::DisplayRole` 角色来获取数据项的文本表示,因此它将显示 "Hello World"。如果我们将鼠标悬停在该数据项上,视图使用 `Qt::ToolTipRole` 角色来获取数据项的文本表示,因此它将显示 "This is a tooltip"。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值