使用 QTeeView 而不是 QTreeWidget

Using QTeeView instead of QTreeWidget

我完全是 QT 和 C++ 的菜鸟。对不起,如果我问了一些非常基本的问题。

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

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

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

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

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

使用 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.

一样可定制