【发布时间】:2015-03-12 18:07:33
【问题描述】:
我有一个 QTreeView,我想展开最近展开的项的所有子项。
我尝试使用 .expandAll(),但它也扩展了所有其他项目。
我很难获得最后扩展的项目的 ModelIndex,如果我有它,我可以递归地扩展它的子项。
我该怎么做?
【问题讨论】:
我有一个 QTreeView,我想展开最近展开的项的所有子项。
我尝试使用 .expandAll(),但它也扩展了所有其他项目。
我很难获得最后扩展的项目的 ModelIndex,如果我有它,我可以递归地扩展它的子项。
我该怎么做?
【问题讨论】:
要扩展给定节点下方的所有节点,我会以以下方式递归执行 (C++):
void expandChildren(const QModelIndex &index, QTreeView *view)
{
if (!index.isValid()) {
return;
}
int childCount = index.model()->rowCount(index);
for (int i = 0; i < childCount; i++) {
const QModelIndex &child = index.child(i, 0);
// Recursively call the function for each child node.
expandChildren(child, view);
}
if (!view->expanded(index)) {
view->expand(index);
}
}
【讨论】:
view->isExpanded(Qt 5.6)吗,你真的认为调用它比调用expand更有效率吗?
expand 已经针对树项目展开的情况进行了优化。所以检查是没有必要的。
从 Qt 5.13 开始
QTreeView::expandRecursively
可用
【讨论】: