我是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()
}
}
}
但是,我想避免通过其stackView
访问id
Stack.view
似乎是我想要的,但是我不知道如何使用它。我尝试了以下所有操作(替换了Button
s'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
是本文中Page
的{{1}},所以我尝试了id
,但这仍然行不通。 (也尝试过使用test1.StackView.view.push(test2)
,但这并不更好)
答案 0 :(得分:1)
请注意,此问题是关于QtQuick.Controls 2.x的。
我还认为,先使用附加属性,而不是通过添加自己的自定义属性来使此功能加倍,是一种很好的样式。
问题是,您在错误的位置使用了附加属性-它附加到被推到Item
上的StackView
上,而不附加到它的任何子元素上。因此,要使用附加的属性,您需要首先指定该Item的标识符。
在示例中,该链接已链接为root
。但这不是id
对象的Component
。它必须是Component
对象内容的根节点。
您应该具有以下内容:
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.
}
}
}
}