【问题标题】:Change selection of a QTreeWidget更改 QTreeWidget 的选择
【发布时间】:2014-01-13 11:52:36
【问题描述】:

我正在使用 QTreeWidget 来显示一些项目。我只有一列,我的树的深度为两。我想添加以下功能:如果选择/取消选择顶级项目并且未展开它,则也应选择/取消选择其子项。问题是我如何知道选择何时发生变化。

我正在为我的自定义小部件子类化 QTreeWidget。我可以连接到 QTreeWidget 的 selectionChanged() 插槽,但在这种情况下,我必须遍历所有顶级项目,找出它们的选择状态是否已更改(因此我还需要存储选择状态),并相应地更新所有内容。

我认为应该有一个 selectionChanged() 信号提供有关选择的更多信息,但我在文档中找不到任何内容。对此有何想法?

【问题讨论】:

  • 你看QAbstractItemView::selectionChanged(const QItemSelection &selected, const QItemSelection &deselected)了吗?这是一个虚函数,您可以在自定义 QTreeWidget 子类中覆盖它。
  • 嗯,这给了我一些QItemSelectionRanges,但我想要实际的QTreeWidgetItem*s 已被选中...
  • 您可以从QItemSelection:: indexes() 获取所选QModelIndexes 的列表,然后使用QTreeWidget::itemFromIndex() 函数获取QTreeWidgetItem
  • 嗯,问题是我需要找到选中的项目,否则程序将永远循环......

标签: c++ qt user-interface


【解决方案1】:

通过选择/取消选择孩子,你的意思是他们应该被扩大(如果被选中)? 还有一个建议,而不是使用 QTreeWidget,我认为 QTreeView 是一个更好的选择,如果你能解释一下这个问题,也许我可以提供一些示例代码

【讨论】:

  • 好吧,我根据所选项目在另一个小部件中绘制一些东西。这个想法是用户首先选择一些顶级元素来绘制较低级别的依赖元素,并且只有在他们想要时手动关闭它们......
猜你喜欢
  • 2018-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 2013-03-03
  • 2017-08-22
相关资源
最近更新 更多