2012-04-03 8 views
4

どうすればよいですか? 実際に私の主な目標は、QTreeWidgetのどのチェックボックスにチェックが入っているかを確認することです。しかし、もし皆さんが私を助けてくれたら、私はこれを行うことができます。 まあ、もう一度QList<QTreeWidgetItem *>という方法を見つけることができないので、リスト全体をチェックして、チェックボックスがチェックされているかどうかを調べることができます(奇妙な文章ですか?)。 QTreeWidget::selectedItems()は私がしたいことをしません。それは実際には選択されたアイテムを取得します(これはただ1つかもしれませんので、ここでアイテムの意味がわかりません。QTreeWidgetからQTreeWidgetItemリストを再度取得する

私の主な目標は今です:QTreeWidgetは、私がそれの項目で何でもしたいことをすることができるようになります。

ありがとうございます。

答えて

19

ツリーを扱っているので、APIはツリー構造のQTreeWidgetItemにアクセスできるように設計されています。このため、QtのAPIを通じて直接すべての単一のQTreeWidgetItemにアクセスする直接的な方法はありません。あなたのアイテムのすべて(あるいはあなたが気にすべての項目であれば

1)「トップレベル」であり、そして、あなたはこのような何かを行うことができます):あなたがこれを行うことができる2つの方法は、しかし、があります

for(int i = 0; i < tree->topLevelItemCount(); ++i) 
{ 
    QTreeWidgetItem *item = tree->topLevelItem(i); 

    // Do something with item ... 
} 

2)あなたは、その項目の子と一緒に、ツリー内のすべての項目にアクセスする必要がある場合には、再帰的なアプローチが順序であってもよい:

doStuffWithEveryItemInMyTree(tree->invisibleRootItem()); 

void doStuffWithEveryItemInMyTree(QTreeWidgetItem *item) 
{ 
    // Do something with item ... 

    for(int i = 0; i < item->childCount(); ++i) 
     doStuffWithEveryItemInMyTree(item->child(i)); 
} 
+0

おかげで男を行うことができますQTreeWidget内のすべてのQTreeWidgetItemの一覧を取得したい場合は、それは確かに私を助けます。私は今書き込むことはできませんが、使用したメソッドのドキュメントを読みました。完全に意味があります。ありがとうございます –

+0

うん、それはうまくいった。どうもありがとうございました。 –

4

以下のコードはPythonであるが、それは簡単にすることができC++に翻訳されています。私は質問に記載されている問題と全く同じ問題を抱えていましたが、私はPySide(Python Qtバインディング)を使用していました。

QTreeWidgetItemのすべてのリストを特定のアイテム(そのアイテム自体を含む)の下に取得する場合は、最初の機能を使用します。ツリー内のすべてのQTreeWidgetItemのリストを取得するには、2番目の関数を呼び出します。

def get_subtree_nodes(tree_widget_item): 
    """Returns all QTreeWidgetItems in the subtree rooted at the given node.""" 
    nodes = [] 
    nodes.append(tree_widget_item) 
    for i in range(tree_widget_item.childCount()): 
     nodes.extend(get_subtree_nodes(tree_widget_item.child(i))) 
    return nodes 

def get_all_items(tree_widget): 
    """Returns all QTreeWidgetItems in the given QTreeWidget.""" 
    all_items = [] 
    for i in range(tree_widget.topLevelItemCount()): 
     top_item = tree_widget.topLevelItem(i) 
     all_items.extend(get_subtree_nodes(top_item)) 
    return all_items 
1

あなたが

QList<QTreeWidgetItem *> items = ui->treeWidget->findItems(
      QString("*"), Qt::MatchWrap | Qt::MatchWildcard | Qt::MatchRecursive); 
関連する問題