Stacklayout 导航使用 Item Id 而不是 currentIndex = #num

Stacklayout navigate using Item Id instead of currentIndex = #num

我将 StackLayout 与许多 windows 一起使用,而不是使用 currentIndex = 0 例如我想使用项目本身的 ID。这样我就不需要关心StackLayout中实现的Item的顺序是什么,代码也更容易阅读。

我没有碰巧找到如何这样做或者是否真的可行。有什么想法吗?

示例代码:

main.qml

StackLayout {
    id: mainStack
    width: parent.width - tabbar.width
    x: tabbar.width

    PageOne {id: pageOne}

    PageTwo {id: pageTwo}

    PageThree {id: pageThree}
}

Button {
    text: "Go to"
    onClicked: {
        mainStack.currentIndex = 0  // how its done
        mainStack.currentIndex = pageOne  //what I want: using Item Id
    }
}

您可以创建一个方法来搜索 StackLayout 的子级,如果找到它,则将 currentIndex 更改为关联的索引:

StackLayout {
    id: mainStack
    width: parent.width - tabbar.width
    x: tabbar.width

    function changeTo(item){
        for(var i in this.children){
            if(this.children[i] === item){
                this.currentIndex = i;
                return true;
            }
        }
        return false;
    }

    PageOne {id: pageOne}

    PageTwo {id: pageTwo}

    PageThree {id: pageThree}
}

Button {
    text: "Go to"
    onClicked: {
        mainStack.changeTo(pageOne)
    }
}