我尝试在的列表中突出显示a 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
}
}
Run Code Online (Sandbox Code Playgroud)
该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);
}
Run Code Online (Sandbox Code Playgroud)
工作正常,但是有一个错误。我们遍历所有项目。选择父级后,父级及其子级会突出显示。但是然后循环继续遍历孩子。由于未选择子项,因此将其取消突出显示(在先前的循环迭代中覆盖突出显示)。我想知道修复它的最佳实践是什么。
首先取消突出显示所有内容,然后突出显示当前选择。
如果selectedItem已经是指向您要突出显示的唯一元素的指针,则无需搜索它,您只需要:
Q_FOREACH (Item *item, items)
item->setHighlightEnabled(false);
selectedItem->setHighlightEnabled(true)
Run Code Online (Sandbox Code Playgroud)