2011-09-14 7 views
0

私はコードでツリーウィジェットの選択を変更する必要があるプロジェクトがあります。これは私が木をきれいにしてから再び植えた後に行う必要があります。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) 
+0

サンプルコードを表示できますか? –

+0

いくつかのコードを追加しました –

+0

'temp.addChild'(と' treeObj.addTopLevelItems')の呼び出しが 'setSelected'の呼び出しに相対的な場所を表示できますか? – alexisdm

答えて

2

は、それがマニュアルで指定されますが、アイテムがまだビューに追加されていない場合setSelectedは何もしませんされていません:

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

だから、あなたがすべきいずれかの

スタート
  • からそれらのビューの一部にするかsetSelected呼び出す前にaddChild/addTopLevelItemを呼び出すためにあなたのQTreeWidgetItemのコンストラクタで
    • パスtreeObjまたはtemp(またはsetExpandedのような他の機能を...)。

    なぜ2番目のコードが機能しているのかわかりません。

  • 関連する問題