2015-03-03 38 views
3

我創建了一個QTreeWidget,我試圖列出所有顯示的項目。如何獲取QTreeWidget的項目數

我不想進入物品內,如果該物品有孩子但沒有擴大。它真的獲得了我可以在樹中看到的項目數量。

我曾嘗試:

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

但是這是給我只有topLevelItem,我想我能看到的。在這個例子中,我應該可以算14個項目

enter image description here

+0

我必須寫,這將運行在所有項目遞歸函數。 – vahancho 2015-03-03 10:20:33

+0

焦慮問題:這是一個GNU/Linux操作系統的自定義主題,或者您可以更改QTreeWidget中的文件夾圖標? – 2015-03-03 10:22:33

+0

圖標是自定義的:-)。我用setIcon直接指向我想要的圖標 – Seb 2015-03-03 10:26:53

回答

4

您可以編寫將運行在層次結構和計算所有顯示的項目遞歸函數。例如:

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);