使用自定义小部件自定义QT QTreeView

时间:2014-03-27 17:52:27

标签: c++ qt user-interface qwidget qtreeview

在我的光栅绘图程序中,我需要创建一个像Photoshop或Sketchbook Pro中的图层界面。我阅读了文档并发现我必须使用QTreeView。但是我没有在关于使用自定义小部件创建QTreeView的文档中找到大量信息。所以:

1)如何将自定义小部件插入树视图? 2)QTreeView和QTreeWidget有什么区别?
3)QAbstractItemModel和qitemdelegate之间有什么区别? 4)任何例子/文章/指南?
5)也许我应该用别的东西?

2 个答案:

答案 0 :(得分:2)

QTreeWidget是一个类中的模型和视图,它被称为便捷视图。它反对分离视图和模型的良好实践,并且可能不应该在文档处理代码中属于文档层概念的系统中使用。

QTreeView只是一个视图,没有任何捆绑的模型。拥有模型时,可以在视图上进行设置,使视图显示模型。

QAbstractItemModel是数据模型。它完全与视图或委托无关 - 模型可以存在并且在没有视图的情况下有用。

委托为视图中的数据项提供显示和编辑窗口小部件。它是视图的属性,而不是模型的属性。不同的视图可以同时使用不同的代理显示相同的模型。

虽然代理允许您提供您所使用的自定义小部件,但可能不需要使用它。如果您显示的项目包含静态内容,则只需提供QImageQPixmap作为数据。

答案 1 :(得分:1)

特殊情况(5):请勿使用QTreeViewQStandardItemModel和其他此类课程。如果您需要与小部件交互+如果您需要动画小部件,那么您应该在其中使用简单的QScrollAreaQVBoxLayout

Qt MVC旨在处理大量的同源数据。它不是为提供基于小部件的交互而设计的。因此,如果您想要为每个项目“分配”一个小部件并与它们进行交互 - 您将在实现委托时遇到很多问题(跟踪鼠标事件,提供编辑器的工厂)。 Ofc,您可以使用自定义绘图和鼠标事件的自定义处理创建自己的代理,但使用简单的小部件非常容易。