QTreeWidgetItem.addChild() 在某些情况下不起作用?



我在将子项添加到 QTreeWidget 中的顶级项目时遇到问题。 我有一个QTreeWidget,用户可以在其中单击一个按钮来添加名为"步骤"的项目。它仅包含两个级别,如以下示例所示:

- TreeWidget
- step1
- step1.1
- step1.2
- [add sub-step button]
- step2
- step2.1
- [add sub-step button]
- [add step button]   

因此,当单击"添加子步骤按钮"时,它应该在按钮本身之前向相关顶级项目添加新子项,并且它工作正常。但是,当单击"添加步骤按钮"时,它应该添加一个顶级项目并向其中添加一个子项,其中包含一个新按钮。问题在于为新按钮添加子级。
按钮连接到此插槽:

@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)

我没有错误消息,但是当我单击"添加步骤按钮"时,它只添加顶级项目,而不是包含该按钮的子项目。我在qt文档或谷歌上找不到任何原因。
我尝试过(但仍然不会将孩子添加到"newStep"(:

  • 添加"正常子项"而不是自定义小部件
  • 使用默认名称,因此无需编辑
  • 添加子项之前进行编辑
  • self.treeWidget.invisibleRootItem().child(index).addChild(child)替换newStep.addChild(child)
  • 测试将按钮添加到另一个顶级项。例如:self.treeWidget.invisibleRootItem().child(0)(有效(

我正在使用pyside2,它正在Maya2018的python解释器中执行(如果此信息有帮助(

下面是一个指向我的代码简化版本的 git hub链接,以便您可以自己进行测试: addStepsExample 有人能看到并解释出了什么问题吗?

问题其实很简单,当显示QTreeWidget后将子项添加到项目中时,默认情况下这些是折叠的,因此没有观察到,解决方案是展开它:

...
step.addChild(child) #<-- ISN'T THIS SUPPOSED TO WORK??
self.addStepsTW.setItemWidget(child, 0, cstmWidget)
step.setExpanded(True)  #<--

最新更新