繁体   English   中英

我不明白QAbstractItemModel的工作原理

[英]I don't understand how QAbstractItemModel works

到目前为止,我已经成功地使用了该类,但是我觉得我对自己的工作没有很好的概念性理解。 我缺少有关Qt模型/视图架构的基本知识,这使我无法充分利用它。 Qt doc似乎没有解决我的问题。 我缺乏了解的很多地方似乎都围绕data()方法。

例如:1)文档没有正确解释(或我错过了)什么是data()方法以及如何正确使用它。 我只是有一个模糊的想法,当我的模型有任何更改时,它是某种回调或插槽函数。 但是从架构上来讲,它的作用是什么? 为什么需要它,它要解决什么问题?

2)说到角色,数据方法中角色参数的意义是什么? 同样,为什么设计人员选择以这种方式实现data()方法?

我希望我的问题不要太抽象。 如果是这样,可能是因为我不完全了解关于模型/视图架构的不了解。 因此不太确定如何提出我的问题。

无论如何,欢迎对这些概念有一定了解的任何人来参加。此外,如果有人比Qt Doc更好地解释了这一点,那么其他人也可以对此进行解释。

非常感谢您的任何反馈。

正如函数名称所暗示的,“ QAbstractItemModel :: data()”用于提供应由视图可视化的信息。 View不需要一次缓存所有数据(在某些情况下为数千个元素),但应在屏幕上显示后立即从此函数进行增量查询。

当谈论数据时,我假设它可以是项目的文本,文本颜色,背景颜色,图标等。所有这些类型的数据都由Qt::ItemDataRole枚举表示,而数据本身由QVariant表示。

例如,如果您具有树视图和相应的模型。 向下滚动树时,它应该绘制,例如20个节点。 树视图为这20个节点中的每一个调用模型的data()函数以绘制其文本,图标,背景等。

最后,为了更好地理解角色。 Qt iconData()模型中具有textData()colorData()iconData()函数, iconData()提供了一个单一的函数data() ,可以根据角色有条件地选择要返回的数据。 这是非常方便的设计明智的选择。

您是否了解过模型/视图编程?

http://doc.qt.io/qt-4.8/model-view-programming.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM