我在Qt 5.9中遇到了Qt Quick 2.1的一些困难 . 具体来说,我正在努力使StackView QML组件完成我需要它做的事情 . 我正在尝试使用属性推送在单独的QML文件中定义的项目,这里是对我所做的事情的描述 .
qml/main.qml
它包含保存屏幕的StackView QML组件 . initialItem正确显示OverView屏幕,因此您可以说这基本上按预期工作 .
// import ...
import "screens"
StackView {
id: mainView
initialItem: OverviewScreen {}
}
qml/screens/OverviewScreen.qml
这是OverView屏幕,其中包含GridView . 单击GridView的委托时,我想初始化一个ItemDetailScreen实例,并在GridView委托上附加属性“Id”,这是附加模型的一个角色 .
// import ...
import "screens"
Item {
// ...
GridView {
// model: ...
delegate: Item {
// ...
MouseArea {
anchors.fill: parent
onClicked: {
mainView.push({item: ItemDetailScreen, parameters: {id: Id}}) // ERROR
}
}
}
}
}
qml/screens/ItemDetailScreen.qml
它包含各种QML组件,但它遵循熟悉的模式,Item作为根组件 .
// import ...
Item {
// ...
}
问题是当执行GridView委托的onClicked处理程序时,我会在屏幕上打印一个错误,引用ItemDetailScreen被推送到mainView的行 .
如果我将一个组件属性添加到OverviewScreen,如下所示: property Component detailScreen: ItemDetailScreen {}
然后将推送更改为 mainView.push(detailScreen)
然后推送成功,我看到屏幕,但是我仍然无法传递任何属性,因为 mainView.push({item: detailScreen, properties: {id: Id}})
也失败并显示错误 .
所以我的问题是这样的:推送具有属性的ItemDetailScreen实例的正确方法是什么?
1 回答
您必须创建一个对象实例:
id
不是常规属性,您不能按照您尝试的方式设置它,它必须在QML源中预定义,您只能设置常规属性:指定属性的另一种方法是使用
Component
: