QTreeWidgetItem.addChild() 在某些情况下不起作用?
QTreeWidgetItem.addChild() doesn't work in some cases?
我在将 child 添加到 QTreeWidget 中的 top-level 项时遇到问题。
我有一个 QTreeWidget,用户可以在其中单击一个按钮来添加名为 "steps" 的项目。它仅包含两个级别,如下例所示:
- TreeWidget
- step1
- step1.1
- step1.2
- [add sub-step button]
- step2
- step2.1
- [add sub-step button]
- [add step button]
所以当 'add sub-step button' 被点击时,它应该在按钮 it-self 之前添加一个新的 child 到相关的 top-level 项目并且它工作正常。但是当单击 'add step button' 时,它应该添加一个 top-level 项目并向其添加一个 child,其中包含一个新按钮。问题在于为新按钮添加 child。
按钮连接到此插槽:
@Slot(int)
def addCustomStep(self, parentIndex):
newStep = QTreeWidgetItem()
newStep.setFlags(Qt.ItemIsEnabled | Qt.ItemIsUserCheckable | Qt.ItemIsEditable)
if parentIndex == -1:
#add a top-level step with button
index = self.treeWidget.invisibleRootItem().childCount() - 1
self.treeWidget.insertTopLevelItem(index, newStep)
child = QTreeWidgetItem()
child.setSizeHint(0, QSize(0, CSTM_STEP_WIDGET_HEIGHT))
child.setFlags(Qt.ItemIsEnabled)
cstmWidget = CustomStepWidget(self.treeWidget, index) #the button
cstmWidget.click.connect(self.addCustomStep)
newStep.addChild(child) #this is the line that doesn't work for some reason
self.treeWidget.setItemWidget(child, 0, cstmWidget)
else:
#add a sub-step to parent
parentItem = self.treeWidget.invisibleRootItem().child(parentIndex)
parentItem.insertChild(parentItem.childCount() - 1, newStep)
self.treeWidget.editItem(newStep, 0)
我没有收到错误消息,但是当我单击 'add step button' 时,它只添加了 top-level 项,而不是包含该按钮的 child 项。我在 qt 文档或 google.
上找不到任何原因
我尝试了什么(但仍然不会将 child 添加到 'newStep'):
- 添加 'normal child' 而不是自定义小部件
- 使用默认名称,因此无需编辑
- 添加前编辑 child
- 将
newStep.addChild(child)
替换为 self.treeWidget.invisibleRootItem().child(index).addChild(child)
- 测试将按钮添加到另一个 top-level 项目。例如:
self.treeWidget.invisibleRootItem().child(0)
(有效)
我正在使用 pyside2,它在 Maya2018 的 python 解释器中执行(如果此信息有帮助)
这是我代码的简化版本的 git 集线器 link,您可以自己测试:addStepsExample
有人可以看到并解释哪里出了问题吗?
问题其实很简单,在显示QTreeWidget
后的item中添加child时,这些默认是折叠的,所以没有观察到,解决方法是展开:
...
step.addChild(child) #<-- ISN'T THIS SUPPOSED TO WORK??
self.addStepsTW.setItemWidget(child, 0, cstmWidget)
step.setExpanded(True) #<--
我在将 child 添加到 QTreeWidget 中的 top-level 项时遇到问题。 我有一个 QTreeWidget,用户可以在其中单击一个按钮来添加名为 "steps" 的项目。它仅包含两个级别,如下例所示:
- TreeWidget
- step1
- step1.1
- step1.2
- [add sub-step button]
- step2
- step2.1
- [add sub-step button]
- [add step button]
所以当 'add sub-step button' 被点击时,它应该在按钮 it-self 之前添加一个新的 child 到相关的 top-level 项目并且它工作正常。但是当单击 'add step button' 时,它应该添加一个 top-level 项目并向其添加一个 child,其中包含一个新按钮。问题在于为新按钮添加 child。
按钮连接到此插槽:
@Slot(int)
def addCustomStep(self, parentIndex):
newStep = QTreeWidgetItem()
newStep.setFlags(Qt.ItemIsEnabled | Qt.ItemIsUserCheckable | Qt.ItemIsEditable)
if parentIndex == -1:
#add a top-level step with button
index = self.treeWidget.invisibleRootItem().childCount() - 1
self.treeWidget.insertTopLevelItem(index, newStep)
child = QTreeWidgetItem()
child.setSizeHint(0, QSize(0, CSTM_STEP_WIDGET_HEIGHT))
child.setFlags(Qt.ItemIsEnabled)
cstmWidget = CustomStepWidget(self.treeWidget, index) #the button
cstmWidget.click.connect(self.addCustomStep)
newStep.addChild(child) #this is the line that doesn't work for some reason
self.treeWidget.setItemWidget(child, 0, cstmWidget)
else:
#add a sub-step to parent
parentItem = self.treeWidget.invisibleRootItem().child(parentIndex)
parentItem.insertChild(parentItem.childCount() - 1, newStep)
self.treeWidget.editItem(newStep, 0)
我没有收到错误消息,但是当我单击 'add step button' 时,它只添加了 top-level 项,而不是包含该按钮的 child 项。我在 qt 文档或 google.
上找不到任何原因
我尝试了什么(但仍然不会将 child 添加到 'newStep'):
- 添加 'normal child' 而不是自定义小部件
- 使用默认名称,因此无需编辑
- 添加前编辑 child
- 将
newStep.addChild(child)
替换为self.treeWidget.invisibleRootItem().child(index).addChild(child)
- 测试将按钮添加到另一个 top-level 项目。例如:
self.treeWidget.invisibleRootItem().child(0)
(有效)
我正在使用 pyside2,它在 Maya2018 的 python 解释器中执行(如果此信息有帮助)
这是我代码的简化版本的 git 集线器 link,您可以自己测试:addStepsExample 有人可以看到并解释哪里出了问题吗?
问题其实很简单,在显示QTreeWidget
后的item中添加child时,这些默认是折叠的,所以没有观察到,解决方法是展开:
...
step.addChild(child) #<-- ISN'T THIS SUPPOSED TO WORK??
self.addStepsTW.setItemWidget(child, 0, cstmWidget)
step.setExpanded(True) #<--