从控件访问 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
有解决办法吗?
- Qt 或 Visual Studio2015 中存在某种错误。对 QML 进行一些修改后,通常需要完全重建。
- 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 操作的实例 - 这在将来重构时不那么脆弱。
抱歉可能是一个愚蠢的问题 - 我是 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
有解决办法吗?
- Qt 或 Visual Studio2015 中存在某种错误。对 QML 进行一些修改后,通常需要完全重建。
- 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 操作的实例 - 这在将来重构时不那么脆弱。