2011-09-14 35 views
0

我有一个项目,我需要在代码中更改树部件的选择。这需要在清除树并重新填充之后完成。set在QTreeWidget中选择

我试图在添加它们时将相应的项目标记为“已选中”。这适用于根级节点。但对于子节点,它不。我需要将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

你能告诉我们一些示例代码吗? –

+0

增加了一些代码 –

+0

你可以显示调用'temp.addChild'(和'treeObj.addTopLevelItems')的地方是否与调用'setSelected'有关吗? – alexisdm

回答

2

它不是在文档中指定,但setSelected什么都不做,如果该项目还没有被添加到一个视图但:

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

所以,你要么

在您的 QTreeWidgetItem的构造
  • treeObjtemp,使他们从一开始就
  • 或致电addChild/addTopLevelItem调用setSelected(或其他功能,如setExpanded ...)前视图的一部分。

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