Qt官方文档阅读笔记-QStyledItemDelegate Class描述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq78442761/article/details/82022014

对应的原文为:

笔记如下:


简单描述:

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()后,将会处理一种特定的数据类型,并且用他的超类进行实现。

  1. 如果要实现自定义委托编辑功能而不想用编辑Item的给出,就必须重写下面的这4个函数.createEditor():返回一个widget这个widget用于从模型中改变数据,并且重新实例化了自定义编辑的行为。
  2. setEditorData():提供了数据编辑的功能;
  3. updateEditorData():确保编辑器在itemview的正确显示;
  4. setModelData():返回更新后的模型数据。

官方提供了一个Star Delegate的例子。

QStyledItemDelegate与QItemDelegate

QItemDelegate:当使用当前的样式(Qt自带的那种,如Windows XP等风格),就用他;
QStyledItemDelegate:当要使用Qt style sheets这个屌玩意的时候就用他。

下一篇将会解析

Star Delegate Example这个官方实例

猜你喜欢

转载自blog.csdn.net/qq78442761/article/details/82022014