对应的原文为:
笔记如下:
简单描述:
QStyledItemDelegate提供了展示和编辑item的功能,让这两种功能更有个性化。QStyledItemDelegate是所有Item View的默认委托。
【注意:QStyledItemDelegate也是Qt模型/视图框架的一部分】
这里有一个逻辑:每一个Item分配一个ItemDataRole,每一个item都存一个QVariant(我擦,这个有意思,感觉相当的流氓,感觉存这个就和Java里的存Object,屏蔽泛型编程差不多了)。QStyledItemDelegate也为用户提供了对普通数据类型的展示和编辑,如bool,int,string。
为了使得数据描述更为准确,Qt为各种数据角色提供了各种各样的委托,为的是让各种模型中的数据有各种的委托。如下所示:
【注意:编辑功能是用QItemEditorFactory创建的】
QItemEditorFactory提供了一个静态的方法(C++里面应该叫函数吧),为每一个要编辑的数据提供委托。(下面是关键点要注意了)这个静态方法有2种,一种是使用自定义工厂setItemEditorFactory()或使用默认工厂QItemEditorFactory::setDefaultFactory()。这里被编辑的数据是用EditRole存储的。QItemEditorFactory类提供了item编辑工厂高级介绍。Color Editor Factory这例子展示了如何去创建自定义编辑工厂。
如何子类化QStyledItemDelegate:
如果委托不支持重绘数据类型,那么就要考虑定做一个item,为此需要子类化QStyledItemDelegate,并且重写paint()和sizeHint()这两个函数,每一个的item都需要调用paint()和sizeHint()函数,可以为每一个item定义一个效果。
当重新实现了paint()后,将会处理一种特定的数据类型,并且用他的超类进行实现。
- 如果要实现自定义委托编辑功能而不想用编辑Item的给出,就必须重写下面的这4个函数.createEditor():返回一个widget这个widget用于从模型中改变数据,并且重新实例化了自定义编辑的行为。
- setEditorData():提供了数据编辑的功能;
- updateEditorData():确保编辑器在itemview的正确显示;
- setModelData():返回更新后的模型数据。
官方提供了一个Star Delegate的例子。
QStyledItemDelegate与QItemDelegate
QItemDelegate:当使用当前的样式(Qt自带的那种,如Windows XP等风格),就用他;
QStyledItemDelegate:当要使用Qt style sheets这个屌玩意的时候就用他。
下一篇将会解析