使用 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
中的标签编辑和复选框,您不必使用自己的 QLineEdit
或 QCheckBox
。您只需将这些项目设置为可编辑和可检查,您将免费获得该行为。
希望这对您做出决定有所帮助。但是再一次,特别是你是 Qt
的新手,请选择 QTreeWidget
.
这并不意味着您不能在 QTreeWidget
中手动模仿 QTreeView
行为。您可以通过连接到 QTreeWidget
的事件循环,或监听其信号,或覆盖其某些事件方法并根据需要创建自定义小部件(例如 QComboBox
)。但是,这将是“hacky”并且可能会出现故障,并且可能需要很长时间才能修复。
根据我的经验,QTreeWidget
是 Qt 中最好的 UI 控件之一。它工作得非常好,并且有大量文档介绍如何以各种方式操纵它以达到您想要的行为。 Qt 自己的 QtPropertyBrowser
,在 Qt Creator
中用于显示各种 UI 控件属性,正在使用 QTreeWidget
。
此外,请记住 QTreeWidget
也支持委托。它不仅像 QTreeView
.
一样可定制
我完全是 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
中的标签编辑和复选框,您不必使用自己的 QLineEdit
或 QCheckBox
。您只需将这些项目设置为可编辑和可检查,您将免费获得该行为。
希望这对您做出决定有所帮助。但是再一次,特别是你是 Qt
的新手,请选择 QTreeWidget
.
这并不意味着您不能在 QTreeWidget
中手动模仿 QTreeView
行为。您可以通过连接到 QTreeWidget
的事件循环,或监听其信号,或覆盖其某些事件方法并根据需要创建自定义小部件(例如 QComboBox
)。但是,这将是“hacky”并且可能会出现故障,并且可能需要很长时间才能修复。
根据我的经验,QTreeWidget
是 Qt 中最好的 UI 控件之一。它工作得非常好,并且有大量文档介绍如何以各种方式操纵它以达到您想要的行为。 Qt 自己的 QtPropertyBrowser
,在 Qt Creator
中用于显示各种 UI 控件属性,正在使用 QTreeWidget
。
此外,请记住 QTreeWidget
也支持委托。它不仅像 QTreeView
.