2011-09-14 32 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 ...)前視圖的一部分。

我不知道爲什麼你的第二個代碼甚至工作。