QML中的树遍历,检查QModelIndex是否有效

Tree traversal in QML, checking if QModelIndex isValid

为了扩展 TreeView 的节点以显示当前选定的项目(由共享选择模型设置),我需要递归调用 TreeView.expand(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();}

"...\Qt.5\Src\qtquickcontrols\src\controls\TreeView.qml"

function expand(index) {
        if (index.valid && index.model !== model)
            console.warn("TreeView.expand: model and index mismatch")
        else
            modelAdaptor.expand(index)
    }

作为 zizix 复制粘贴答案的副作用,我了解到 QModelIndex::isValid 函数转换为 QML 中的 index.valid 属性 (?)。使用它,我现在可以在 QML 中成功检测到树的根:

function autoExpand(index ) {
        var oneUp = index

        do {
            oneUp = oneUp.parent
            expand(oneUp)                
        } while (oneUp.valid);

    }