Я пытаюсь выделить selectedItem
и его потомков среди списка items
.
const QList<Item *> items = /* ... */;
Item *selectedItem = /* ... */;
Q_FOREACH( Item *item, items ) {
if ( selectedItem == item ) {
item->setHighlightEnabled(true); // Highlight selected item
} else {
item->setHighlightEnabled(false); // De-highlight other items
}
}
Метод item->setHighlightEnabled
рекурсивно делает то же самое для детей:
void Item::setHighlightEnabled(bool enabled)
{
if (enabled) {
/* highlight item */
} else {
/* de-highlight item */
}
// Go through all children and highlight them too
Q_FOREACH (Item *child, children())
child->setHighlightEnabled(enabled);
}
Работает нормально, но есть ошибка.Переходим по всем элементам.Когда родитель выбран, родитель и его дочерние элементы подсвечиваются.Но затем цикл продолжает перебирать детей.Поскольку дочерние элементы НЕ выбраны, они не выделяются (перезапись выделяется в предыдущих итерациях цикла).Интересно, как лучше это исправить?