6

QTreeWidget を作成しました。表示されるすべてのアイテムを一覧表示しようとしています。

アイテムに子があるが展開されていない場合、アイテムの中に入りたくありません。ツリーに表示されるアイテムの数を実際に取得しています。

私が試してみました :

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

しかし、これは私にtopLevelItemしか与えていないので、私が見ることができるものすべてが欲しい. 例では、14 個のアイテムを数えることができるはずです

ここに画像の説明を入力

4

2 に答える 2

5

階層全体で実行され、表示されているすべてのアイテムをカウントする再帰関数を作成できます。例えば:

int treeCount(QTreeWidget *tree, QTreeWidgetItem *parent = 0)
{
    int count = 0;
    if (parent == 0) {
        int topCount = tree->topLevelItemCount();
        for (int i = 0; i < topCount; i++) {
            QTreeWidgetItem *item = tree->topLevelItem(i);
            if (item->isExpanded()) {
                count += treeCount(tree, item);
            }
        }
        count += topCount;
    } else {
        int childCount = parent->childCount();
        for (int i = 0; i < childCount; i++) {
            QTreeWidgetItem *item = parent->child(i);
            if (item->isExpanded()) {
                count += treeCount(tree, item);
            }
        }
        count += childCount;
    }
    return count;
}

そして使用法:

QTreeWidget tw;
// Add items
[..]
int visibleItemsCount = treeCount(&tw);
于 2015-03-03T11:05:44.140 に答える