在我的光栅绘图程序中,我需要创建一个像Photoshop或Sketchbook Pro中的图层界面。我阅读了文档并发现我必须使用QTreeView。但是我没有在关于使用自定义小部件创建QTreeView的文档中找到大量信息。所以:
1)如何将自定义小部件插入树视图?
2)QTreeView和QTreeWidget有什么区别?
3)QAbstractItemModel和qitemdelegate之间有什么区别?
4)任何例子/文章/指南?
5)也许我应该用别的东西?
答案 0 :(得分:2)
QTreeWidget
是一个类中的模型和视图,它被称为便捷视图。它反对分离视图和模型的良好实践,并且可能不应该在文档处理代码中属于文档层概念的系统中使用。
QTreeView
只是一个视图,没有任何捆绑的模型。拥有模型时,可以在视图上进行设置,使视图显示模型。
QAbstractItemModel
是数据模型。它完全与视图或委托无关 - 模型可以存在并且在没有视图的情况下有用。
委托为视图中的数据项提供显示和编辑窗口小部件。它是视图的属性,而不是模型的属性。不同的视图可以同时使用不同的代理显示相同的模型。
虽然代理允许您提供您所使用的自定义小部件,但可能不需要使用它。如果您显示的项目包含静态内容,则只需提供QImage
或QPixmap
作为数据。
答案 1 :(得分:1)
特殊情况(5):请勿使用QTreeView
,QStandardItemModel
和其他此类课程。如果您需要与小部件交互+如果您需要动画小部件,那么您应该在其中使用简单的QScrollArea
和QVBoxLayout
。
Qt MVC旨在处理大量的同源数据。它不是为提供基于小部件的交互而设计的。因此,如果您想要为每个项目“分配”一个小部件并与它们进行交互 - 您将在实现委托时遇到很多问题(跟踪鼠标事件,提供编辑器的工厂)。 Ofc,您可以使用自定义绘图和鼠标事件的自定义处理创建自己的代理,但使用简单的小部件非常容易。