2017-02-01 16 views
1

Qt предоставляет класс QTreeWidgetItemIterator для итерации элементов дерева. Существует даже версия конструктора, которая вместо указателя принимает указатель на элемент. К сожалению, даже в этом случае итерация будет уменьшаться до самого последнего элемента. Часто это не ожидаемое поведение. Если я начну с предмета, я хочу повторить только его детей и внуков. Конечно, я мог бы получить еще один цикл вверх по дереву, чтобы проверить, не вышел ли я за пределы исходного элемента, но это уродливо. Есть ли способ сделать это красиво?Как итерации подэлементов QTreeWidgetItem в Qt

QTreeWidgetItemIterator it(treeWidget); 
     while (*it) { 
      if ((*it)->text(0) == itemText) 
       (*it)->setSelected(true); 
      ++it; 
     } 

ответ

1

Если у вас есть родительский элемент, чтобы начать с, а затем просто проходным своими детьми:

for (int i = 0; i < item->childCount(); i++) 
{ 
    QTreeWidgetItem *child = item->child (i); 
    // ... perform work here ... 
} 

Я не вижу итератор, который перебирает Дочерние элементы, но на самом деле нет необходимости для этого.

+0

не будет слишком медленным из-за пункта-> child (i) в качестве дополнительной петли O (n)? – def