从控件访问 QML StackView

Access QML StackView from a control

抱歉可能是一个愚蠢的问题 - 我是 QML 的新手。

我的 StackView 页面之一:

Page
{
    id : root

    header: ToolBar
    {   
        BackButton
        {
            anchors.left: parent.left
        }
    }
}

后退按钮代码:

Button
{
    text: "<"
    font.pixelSize: 20
    width: 30
    onClicked: parent.root.StackView.view.pop()
}

我也试过 parent.StackView。没有运气。得到:

TypeError: Cannot call method 'pop' of null

有解决办法吗?

  1. Qt 或 Visual Studio2015 中存在某种错误。对 QML 进行一些修改后,通常需要完全重建。
  2. root.StackView.view.pop() 是正确的。

我建议这样。

main.qml:

import QtQuick 2.6
import QtQuick.Controls 2.0

StackView {
    id: stackView
    initialItem: Page {
        header: ToolBar {
            BackButton {
                anchors.left: parent.left
                view: stackView
            }
        }
    }
}

BackButton.qml:

import QtQuick 2.6
import QtQuick.Controls 2.0

Button {
    property StackView view
    text: "<"
    font.pixelSize: 20
    width: 30
    onClicked: view.pop()
}

这样,您就不会依赖组件外部的 id。相反,您传入您希望 BackButton 操作的实例 - 这在将来重构时不那么脆弱。