【问题标题】:Access QML StackView from a control从控件访问 QML StackView
【发布时间】:2017-05-29 20:40:39
【问题描述】:

抱歉,这可能是一个愚蠢的问题 - 我对 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

有解决办法吗?

【问题讨论】:

  • 为了将来参考,请查看有关如何在stackoverflow.com/help/mcve 上创建最小示例的说明 - 在当前形式中,您的示例根本不完整(它不包括导入,并且根本不显示 StackView)。

标签: qt qml qt5.7 qtquickcontrols2


【解决方案1】:

我会建议这样的东西。

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 对其进行操作的实例 - 这在未来重构时不会那么脆弱。

【讨论】:

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

    【讨论】:

    • root.StackView.view.pop() 对我不起作用。 root.StackView 是空对象 {}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多