我尝试在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);
}
工作正常,但存在错误。我们遍历所有项目。选择父级后,父级及其子级会突出显示。但是然后循环继续遍历孩子。由于未选择子项,因此将其取消突出显示(在先前的循环迭代中覆盖突出显示)。我想知道修复它的最佳实践是什么。
答案 0 :(得分:3)
据我了解您的问题,您可以进行for循环。在第一个中,您取消突出显示所有元素。第二个按原样保留,一旦找到所选项目,就用break;
语句停止它。
答案 1 :(得分:2)
首先取消突出显示所有内容,然后突出显示当前选择。
如果selectedItem
已经是您要突出显示的唯一元素的指针,则无需搜索它,只需要:
Q_FOREACH (Item *item, items)
item->setHighlightEnabled(false);
selectedItem->setHighlightEnabled(true)