为了扩展TreeView的节点以显示当前选择的项目(由共享选择模型设置),我需要递归调用TreeView.expand(QModelIndex)。在QML中遍历树,检查QModelIndex是否有效
expand(index)
expand(index.parent)
expand(index.parent.parent)
...
这可以通过一个函数来完成这样的:
function autoExpand(index) {
print(index)
var oneUp = index
do {
print(oneUp)
oneUp = index.parent
expand(oneUp)
print("do")
print(oneUp)
} while (oneUp)
}
但我不知道如何检查根节点。我试图
while (oneUp) -> always true
while (oneUp.isValid) -> undefined ie always false
while (oneUp.isValid()) -> property isValid cannot be called as a function
,在C++中,它应该是:
do {
//....
} while (oneUp.isValid());
,但我无法找到QML同等功能(不知道到哪里寻找代码...)
作为一种变通方法我检查它在C++在已经出口,但是好了,它看起来并不合适的对象:
public slots:
bool indexIsValid(const QModelIndex &index) const {return index.isValid();}
这不起作用? http://doc.qt.io/qt-5/qml-qtquick-controls-treeview.html#expand-method – danielfranca
它可以工作,但它也不会扩展父节点。这就是为什么我必须向上遍历树并扩展每个父节点 –
您是否曾尝试追加根元素?然后再比较一下。 – danielfranca