自定义QT QTreeView与自定义小部件

Customizing QT QTreeView with custom widgets

本文关键字:自定义 小部 QTreeView QT      更新时间:2023-10-16

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

1)如何插入自定义部件到树视图?
QTreeView和QTreeWidget的区别是什么?
QAbstractItemModel和qitemdelegate的区别是什么?
4)有没有例子/文章/指南?
也许我应该用别的东西?

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

QTreeView只是一个视图,没有任何绑定的模型。当你有一个模型时,你可以在视图上设置它,使视图显示模型。

A QAbstractItemModel为数据模型。它与视图或委托完全无关——模型完全可以在没有视图的情况下存在并发挥作用。

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

尽管委托允许您提供所需的自定义小部件,但它的使用可能是不必要的。如果显示的项目具有静态内容,则可以简单地提供QImageQPixmap作为数据。

特别针对您的情况(5):不要使用任何QTreeView, QStandardItemModel和其他此类类。如果你需要与小部件交互,如果你需要小部件动画,那么你应该使用简单的QScrollAreaQVBoxLayout里面。

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