我有一个项目需要在代码中更改树窗口小部件的选择。这需要在我清除树并再次填充之后完成。
我正在尝试将相应的项目标记为“已选中”,而我正在添加它们。这适用于根级节点。但是对于子节点,它没有。我需要将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)
答案 0 :(得分:2)
文档中未指定,但如果项目尚未添加到视图中,则setSelected
不执行任何操作:
inline void QTreeWidgetItem::setSelected(bool aselect)
{ if (view) view->setItemSelected(this, aselect); }
所以,你应该
treeObj
的构造函数中传递temp
或QTreeWidgetItem
,使其从一开始就成为视图的一部分addChild
/ addTopLevelItem
,然后致电setSelected
(或setExpanded
等其他功能...)。我不知道为什么你的第二个代码工作正常。