我不明白QAbstractItemModel是如何工作的

时间:2013-10-31 00:29:44

标签: c++ qt

到目前为止,我一直在成功地使用这个课程,但我觉得我对我正在做的事情没有很好的概念性理解。我遗漏了一些关于Qt模型/视图架构的基本知识,这使我无法充分利用它。 Qt doc似乎没有解决我的问题。我缺乏理解的大部分内容似乎都围绕着data()方法。

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

2)说到角色,数据方法中角色参数的重点是什么。同样,为什么设计师选择以这种方式实现data()方法呢?

我希望我的问题不是太抽象。如果它们可能是因为我不完全理解我对模型/视图架构的理解。因此不太确定如何制定我的问题。

无论如何,任何对这些概念有一定理解的人都欢迎加入。如果有人知道其他地方比Qt doc更好地解释这个问题,那也很好。

非常感谢任何反馈。

2 个答案:

答案 0 :(得分:1)

由于函数名称提示`QAbstractItemModel :: data()'用于提供视图应该可视化的信息。 View不需要一次性缓存所有数据(在某些情况下是数千个元素),但只要它应该在屏幕上显示,就会逐步从该函数中查询它。

当我谈论数据时,我认为它可能是项目的文本,文本颜色,背景颜色,图标等。所有这些类型的数据由Qt::ItemDataRole枚举表示,数据本身由{{1表示}}

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

最后,为了更好地理解角色。 Qt不是在模型中使用QVarianttextData()colorData()函数,而是提供一个函数iconData(),它能够根据角色有条件地选择返回哪些数据。这在设计方面非常方便。

答案 1 :(得分:0)

你读过有关模型/视图编程的内容吗?

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