【问题标题】:How to access containing QML StackView?如何访问包含 QML StackView?
【发布时间】:2018-06-25 08:56:38
【问题描述】:

我是 QML 的新手,我有一个组件被推送到 StackView 上。我想从这个组件中访问包含它的 StackView。

这是一个有效的代码

import QtQuick 2.11
import QtQuick.Controls.2.2

ApplicationWindow {
    id: window

    StackView {
        id: stackView
        initialItem: test1
        anchors.fill: parent
    }
    Component {
        id: test1
        Button {
            text: "Go to test2"
            onClicked: stackView.push(test2)
        }
    }
    Component {
        id: test2
        Button {
            text: "Back to test1"
            onClicked: stackView.pop()
        }
    }
}

但是,我想避免通过其id 访问stackView

Stack.view 似乎是我正在寻找的东西,但我不知道如何使用它。我尝试了以下所有方法(替换 Buttons' onClicked):

Stack.view.push(test2)
view.push(test2)
test1.Stack.view.push(test2)
test1.view.push(test2)

这些都不起作用。 我是不是误会了什么?我应该如何使用Stack.view

编辑:这个问题看起来和我的很接近:Access QML StackView from a control

我确实可以使用属性来保留对我的StackView 的引用,但如果可能的话,我仍然想避免这种情况。 接受的答案说root.StackView.view.pop() 是正确的方法。我假设root 是这篇文章中的Pageid,所以我尝试了test1.StackView.view.push(test2),但这仍然不起作用。 (也试过root,但不是更好)

【问题讨论】:

标签: qt qml


【解决方案1】:

请注意,此 Q/A 是关于 QtQuick.Controls 2.x

我也认为首先使用附加属性是一种很好的风格,而不是通过添加自己的自定义属性来加倍这个功能。

问题是,您在错误的地方使用了附加属性 - 它附加到被推送到 StackView 上的 Item 而不是它的任何子级。所以要使用附加属性,需要先指定这个Item的标识符。

在已链接的示例中,这是root。但它不是Component 对象的id。它必须是Component-object 内容的根节点。

你应该有这样的东西:

Component {
    id: myComponent
    Item { // The Page. To this the attached property will be attached.
        id: myComponentRoot // Use this to identify the root node of the pushed item.
        Item { // Some more layers ...
        ...
            Button { // Here you now want to access it perhaps?
                onClicked: myComponentRoot.StackView.view.pop() // Reference the root node of the component to access it's attached properties.
            }
        }
    }
}

【讨论】:

  • myComponentRoot.StackView.view 未定义
  • 在这种情况下,请分享一个完整且可验证的最小示例。
  • 在您的问题中,您使用了已弃用的 QtQuick.Controls 1。这个问题是关于现代版本 2.x
  • 等我回到文明去看看。
猜你喜欢
  • 1970-01-01
  • 2017-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多