Qt::ItemDataRole和Qt::ItemFlag
Qt::ItemDataRole
模型中每一个item并不仅仅只有一个用于显示的QString数据,表格为了正确显示某个item,它需要item提供用于显示用的QString,用于编辑状态时显示的QString,用于显示格子大小的QSize,用于显示这个格子背景色的QBrush等等。也就是说模型中每一个item都有一组与之关联的数据,用于指示每个item在表中如何显示。而这样一组数据在item的显示中扮演了不同角色。
item如何提供这样的一组数据呢?它提供一个QVariant data(int role)函数,让模型来根据不同的role查询不同的数据,例如data(Qt::DisplayRole)可以得到显示用的文本,data(Qt::ForegroundRole)可以得到该item以什么样的颜色显示等等。
一般我们设置一个item时,大多数时候只设置了其文本数据,其它的使用的默认值。实际上我们可以通过setData(brush, Qt::ForegroundRole)来控制文本颜色等。
Qt::UserRole
一个item有多个预定义的角色数据,通常情况下够用。但是有时候我们需要item内部保存一个或多个我们自定义的数据。
例如保存我们自己定义的结构体指针,可以使用
setData(void* ptr ,Qt::UserRole)
如果我们还需要保存一个int,那么可以使用
setData(value ,Qt::UserRole+1)
相应的查询代码则是:
data(Qt::UserRole)和data(Qt::UserRole+1)
Qt::ItemFlag
Qt::ItemFlag用于描述一个item拥有哪些属性。例如Qt::ItemIsSelectable表示item是可以被选中的,Qt::ItemIsEditable表示item是可编辑的,Qt::ItemIsDragEnabled表示item是可拖拽的。