【问题标题】:Using QTeeView instead of QTreeWidget使用 QTeeView 代替 QTreeWidget
【发布时间】:2020-06-22 13:56:47
【问题描述】:

我是 QT 和 C++ 方面的菜鸟。抱歉,如果我问了一些非常基本的问题。

我设计了一个看起来像这样的QTreeWidget

TreeWidget 中的值针对特定设备“X”显示。我正在寻找的功能是,如何根据用户的选择更改/显示/替换值(基本上更改 Value 列中的数字)。我至少有 10 个这样的设备,Value 列的值不同。

我知道我必须在这里使用模型/视图方法。经过激烈的谷歌搜索后,我发现我需要使用QTreeView 而不是QTreeWidget,但是使用TreeView 我无法添加旋转框或复选框。一些链接还建议绘制和重新创建按钮以复制我认为对于我拥有的简单用例来说过大的精确视图。

有人可以建议我一个简单的方法来实现这一点吗?如果我完全理解这些概念和方法错误,请告诉我。

主要要求:根据某些选择替换此视图的值(TreeWidget)。

【问题讨论】:

  • 使用属性浏览器老兄!!
  • 你不能只使用QTreeView而不是QTreeWidget,你还必须有一个模型(继承自QAbstractTableModel或你自己的模型继承自QAbstractItemModel)。关键是您有model 用于存储数据,view(QTreeView) 用于在 GUI 中显示该数据。在this 文章中也有所有解释。
  • @Robert.K 感谢您的回复。我看了一下QTreeView。我需要使用委托来添加像QSpinBox 这样的小部件或一个简单的复选框。正如您所说,从 QAbstractItemModel 继承的自定义模型提供数据以与代表一起查看。对?如果我错了,请纠正我。再次感谢

标签: c++ qt qt-creator qtwidgets


【解决方案1】:

使用QTreeView 优于QTreeWidget 的优势在于它的性能。如果您计划显示大量行(例如 > 1000)并计划在这些行中使用自定义控件(QComboBox 是最昂贵的行),那么QTreeView 更好。 QTreeView 性能更高的原因是,当您双击单元格并想要编辑其数据时,它会按需创建您的自定义小部件(例如 QComboBox)。 QTreeWidget,相反,不是那样工作的。当您立即填充 100 行并在每一行上调用 setItemWidget() 并输入 QComboBox 时,您会发现填充 QTreeWidget 需要很长时间。使用QTreeView,您可以在委托中编写创建和删除QComboBox 的逻辑。

另外,请记住,对于标签编辑和QTreeWidget 中的复选框,您不必使用自己的QLineEditQCheckBox。您只需使这些项目可编辑和可检查,您将免费获得该行为。

希望这有助于您做出决定。但是再一次,尤其是您是 Qt 的新手,请使用 QTreeWidget

这并不意味着您不能手动模仿QTreeWidget 中的QTreeView 行为。您可以通过挂钩QTreeWidget 的事件循环,或监听其信号,或覆盖其某些事件方法并按需创建自定义小部件(例如QComboBox)。但是,这将是“hacky”并且可能会出现故障并且可能需要很长时间才能修复。

根据我的经验,QTreeWidget 是 Qt 中最好的 UI 控件之一。它工作得非常好,并且有大量关于如何以各种方式操作它以达到您想要的行为的文档。 Qt 自己的QtPropertyBrowser,在Qt Creator 中用于显示各种UI 控件属性正在使用QTreeWidget

另外,请记住QTreeWidget 也支持委托。它不只是像QTreeView 那样可定制。

【讨论】:

  • 感谢您的回答。我目前正在使用 QTreeWidget,当然还有你提到的一些技巧。除非单击,否则 QTreeView 默认不显示小部件。这不是我所追求的理想行为,所以我坚持使用 QTreeWidget。
  • @ShreeshaN,您也可以使用QTreeView 实现您提到的行为,但这需要额外的工作。我更喜欢QTreeWidget,而且Qt 似乎也是如此,否则他们的QtPropertyBrowser 就不会使用QTreeWidget
  • @ShreeshaN,这是QtPropertyBrowser源代码的链接:github.com/qtproject/qt-solutions/tree/master/qtpropertybrowser
  • @ShreeshaN,它有点过时了,但总的来说是一个很好的库,并且有颜色选择器之类的东西。因此,如果您有一个简单的键/值对显示小部件,您甚至可以使用它而不是自己制作 QTreeWidget
  • 这是另一个积极维护并执行类似操作的库:github.com/qtinuum/QtnProperty
猜你喜欢
  • 1970-01-01
  • 2015-10-04
  • 2012-02-16
  • 2016-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-30
  • 2014-03-06
相关资源
最近更新 更多