在QTreeWidget中设置了setSelected

时间:2011-09-14 16:58:10

标签: python qt pyqt4

我有一个项目需要在代码中更改树窗口小部件的选择。这需要在我清除树并再次填充之后完成。

我正在尝试将相应的项目标记为“已选中”,而我正在添加它们。这适用于根级节点。但是对于子节点,它没有。我需要将QTreeWidgetItem存储在另一个变量中,并在树完全填充后将其标记为已选中。为什么会这样?

这不起作用:

def refreshTree(self):
    treeObj.clear()
    for item in items:
        temp = QTreeWidgetItem(0)
        for key, val in item.subitems().items():
            childTemp = QTreeWidgetItem(0)
            ...setup text, font, etc...

            if(condition1):
                childTemp.setSelected(True)
            temp.addChild(childTemp)

        if(!condition1 and condition2):
            temp.setSelected(True)

        treeObj.addToplevelItem(temp)

这样做:

def refreshTree(self):
    treeObj.clear()
    for item in items:
        temp = QTreeWidgetItem(0)
        for key, val in item.subitems().items():
            childTemp = QTreeWidgetItem(0)
            ...setup text, font, etc...

            if(condition1):
                selTemp = childTemp
            temp.addChild(childTemp)

        if(!condition1 and condition2):
            temp.setSelected(True)
        elif(selTemp):
            selTemp.setSelected(True)
        treeObj.addToplevelItem(temp)

1 个答案:

答案 0 :(得分:2)

文档中未指定,但如果项目尚未添加到视图中,则setSelected不执行任何操作:

inline void QTreeWidgetItem::setSelected(bool aselect)
{ if (view) view->setItemSelected(this, aselect); }

所以,你应该

  • treeObj的构造函数中传递tempQTreeWidgetItem,使其从一开始就成为视图的一部分
  • 或致电addChild / addTopLevelItem,然后致电setSelected(或setExpanded等其他功能...)。

我不知道为什么你的第二个代码工作正常。