QTreeWidget中的setSelected
我有一个项目,需要在代码中更改树形控件的选中项。这项操作必须在我清空树形控件并重新填充数据之后进行。
我试着在添加项的时候把合适的项目标记为“选中”。这样对根节点是有效的,但对子节点就不行。我需要把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 个回答
2
文档里没有说明,但如果这个项目还没被添加到视图中,setSelected
就不会起作用:
inline void QTreeWidgetItem::setSelected(bool aselect)
{ if (view) view->setItemSelected(this, aselect); }
所以,你应该:
- 在创建
QTreeWidgetItem
的时候,把treeObj
或者temp
传进去,这样它们一开始就能成为视图的一部分 - 或者在调用
setSelected
(或者其他像setExpanded
这样的函数)之前,先调用addChild
或addTopLevelItem
。
我也不知道你第二段代码为什么能工作。