从控件访问QML StackView

时间:2017-01-14 16:16:55

标签: qt qml qt5.7 qtquickcontrols2

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

我的StackView的一个页面:

Page
{
    id : root

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

BackButton代码:

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

我也尝试过parent.StackView。没运气。获得:

TypeError: Cannot call method 'pop' of null

有解决方案吗?

2 个答案:

答案 0 :(得分:2)

我建议这样的事情。

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操作的实例 - 这在将来重构时不那么脆弱。

答案 1 :(得分:1)

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