【问题标题】:Customizing QT QTreeView with custom widgets使用自定义小部件自定义 QT QTreeView
【发布时间】:2014-05-06 21:20:08
【问题描述】:

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

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

【问题讨论】:

  • 这个问题有点太笼统了,看来你需要多花点时间阅读一下Qt文档。
  • 我阅读了 Qt 文档。如果我在那里找到答案,我不会问这个。
  • 如果您使用 Qt Creator,请转到欢迎页面,选择 [示例] 部分,然后在搜索栏中输入 modelview。选择一个示例,然后阅读代码。这一切都在那里:)

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


【解决方案1】:

特殊情况 (5):不要使用 QTreeViewQStandardItemModel 和其他此类中的任何一个。如果您需要与小部件进行交互 + 如果您需要为小部件设置动画,那么您应该使用简单的 QScrollArea 并在其中使用 QVBoxLayout

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

【讨论】:

    【解决方案2】:

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

    QTreeView 只是一个视图,没有任何捆绑模型。有了模型后,可以将其设置在视图上,使视图显示模型。

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-16
      • 2021-02-27
      • 1970-01-01
      相关资源
      最近更新 更多