StupidBeauty
Read times:748Posted at:Wed Nov 27 20:49:02 2013
- no title specified

Jwt3.3.0文档翻译:类WabstractItemModel,Class WAbstractItemModel

这是个抽象模型类,可与Wt 的视图类配套使用。

这个抽象模型类被多个JWt 视图部件用途数据模型

它可为树型和表格型视图部件提供数据模型功能。这样,数据就是被组织在一个由表格组成的层级结构中,其中每个条目都能储存数据,并且第0列的条目可以作为一个嵌套的数据表的亲代对象。每个数据条目都由它的行号、列号和亲代条目索引来唯一标识,另外还可以通过辅助类 WModelIndex 来引用各个条目。

每个条目都可以为多个不同的 角色 提供数据,并且可以使用 标志位 来指示不同的选项。不同的角色可用来表现一个条目的不同方面(它的文本文字值、图标、样式类),或者保存自定义的辅助信息。标志位用于向视图提供信息,指示这个条目允许进行哪些类型的交互。

顶级数据的亲代 WModelIndex null

数据本身的类型是Object,它可能为null,也可能为任何类型的数据。然而,取决于具体的角色,视图类可能会预期那里有特定类型的数据(例如,对于图表就预期那里是数值类型)或者会将数据直接转换成字符串(例如, ItemDataRole.DisplayRole )。

要实现一个自定义的模型,妳需要覆盖(reimplement)以下方法:

在实现一个层次型的模型时,有一个狠关键的问题(crucial point)就是,要决定如何以一个内部指针( WModelIndex#getInternalPointer() )的形式来引用一个索引。顶级的那个索引比较特殊,它是使用一个无效的索引来引用的,除了这个索引之外,每个拥有子代条目的索引都必须能够使用上一句中说到的那个内部指针对象来唯一地标识。例如,在 WStandardItemModel 中,内部指针是指向其亲代 WStandardItem 对象的。对于表格型模型,内部指针是无用的,因为只有顶级索引才拥有子代条目。

如果妳想支持对本模型的编辑功能,那么,妳需要用一个 ItemFlag.ItemIsEditable 标志来指示出自己的这种支持,然后覆盖 setData() 。视图类会使用 EditRole 这个角色来读取及更新编辑器的数据。

当模型的数据发生改变时,模型必须发射 dataChanged() 信号。

最后说的是,用来插入新数据或删除数据(这会改变几何特征)的通用接口,不过,这个接口是不被任何视图类使用的:

妳也可以提供一套妳自己的接口来改变模型中的数据。无论是采用哪种手段,有一点狠重要,那就是,妳需要调用相应的受保护(protected)成员函数,它们会发射相应的信号,这样,视图才能够显示出相应的变化。

章泽天

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands