到目前为止,我一直在成功地使用这个课程,但我觉得我对我正在做的事情没有很好的概念性理解。我遗漏了一些关于Qt模型/视图架构的基本知识,这使我无法充分利用它。 Qt doc似乎没有解决我的问题。我缺乏理解的大部分内容似乎都围绕着data()方法。
例如: 1)doc没有正确解释(或者我错过了)data()方法是什么以及如何正确使用它。我只是有一个模糊的想法,它是某种回调或插槽功能,当我的模型有任何变化。但从架构上讲,它的作用是什么?为什么需要它,它解决了什么问题?
2)说到角色,数据方法中角色参数的重点是什么。同样,为什么设计师选择以这种方式实现data()方法呢?
我希望我的问题不是太抽象。如果它们可能是因为我不完全理解我对模型/视图架构的理解。因此不太确定如何制定我的问题。
无论如何,任何对这些概念有一定理解的人都欢迎加入。如果有人知道其他地方比Qt doc更好地解释这个问题,那也很好。
非常感谢任何反馈。
答案 0 :(得分:1)
由于函数名称提示`QAbstractItemModel :: data()'用于提供视图应该可视化的信息。 View不需要一次性缓存所有数据(在某些情况下是数千个元素),但只要它应该在屏幕上显示,就会逐步从该函数中查询它。
当我谈论数据时,我认为它可能是项目的文本,文本颜色,背景颜色,图标等。所有这些类型的数据由Qt::ItemDataRole
枚举表示,数据本身由{{1表示}}
例如,如果您有树视图和相应的模型。当您向下滚动树时,它应该绘制,比如20个节点。树视图为这20个节点中的每一个调用模型的data()函数来绘制它们的文本,图标,背景等。
最后,为了更好地理解角色。 Qt不是在模型中使用QVariant
,textData()
,colorData()
函数,而是提供一个函数iconData()
,它能够根据角色有条件地选择返回哪些数据。这在设计方面非常方便。
答案 1 :(得分:0)
你读过有关模型/视图编程的内容吗?