使用自定义控件定制QT QTreeView

4
在我的光栅绘图程序中,我需要创建一个类似于Photoshop或Sketchbook Pro的分层界面。我阅读了文档并发现我必须使用QTreeView。但是我在文档中没有找到有关如何创建具有自定义小部件的QTreeView的信息。所以:
1)如何将自定义小部件插入树形视图中?
2)QTreeView和QTreeWidget之间有什么区别?
3)QAbstractItemModel和qitemdelegate之间有什么区别?
4)有任何示例/文章/指南?
5)也许我应该使用其他东西?

这个问题有点太宽泛了,看起来你需要花更多的时间阅读Qt文档。 - Nathan Monteleone
我阅读了Qt文档。如果我在那里找到答案,我就不会问这个问题了。 - user2487382
如果您使用Qt Creator,请转到欢迎页面,选择[示例]部分,在搜索栏中键入“model”或“view”。选择一个示例并阅读代码。一切都在那里 :) - Kuba hasn't forgotten Monica
2个回答

3
QTreeWidget是一种将模型和视图结合在一个类中的方便视图。它违反了将视图和模型分离的良好实践,可能不适用于文档层概念归入文档处理代码的系统。 QTreeView只是一个视图,没有任何捆绑模型。当您拥有模型时,可以将其设置为视图,使视图显示模型。 QAbstractItemModel是数据模型。它与视图或委托无关-模型可以存在并且在没有视图的情况下也很有用。
代理为视图中的数据项提供显示和编辑小部件。它是视图的属性,而不是模型的属性。不同的视图可以同时使用不同的代理显示同一模型。
虽然代理可让您提供所需的自定义小部件,但使用它可能是不必要的。如果您显示的项目具有静态内容,可以简单地将QImageQPixmap作为数据提供。

2
特别针对您的情况(5):不要使用任何QTreeViewQStandardItemModel和其他类似的类。如果您需要与小部件交互+如果您需要小部件进行动画处理,则应使用简单的QScrollArea,其中包含QVBoxLayout
Qt MVC旨在处理大量相关数据。它并不是为了提供基于小部件的交互而设计的。因此,如果您想要将一个小部件“分配”给每个项目并与其交互,则在实现委托时会遇到很多问题(跟踪鼠标事件,提供编辑器工厂)。当然,您可以创建自己的委托,具有自定义的绘制和自定义的鼠标事件处理,但使用简单的小部件更加容易。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接