QML 将 QtObject 从一个 qml 传递到另一个
QML pass QtObject from one qml to another
一段时间以来,我一直在努力思考这个问题,想出了一些技巧,但 none 其中似乎是正确的方法。希望这是有道理的。假设我有三个 qml 文件。
第一个 QML:
...
ListView {
id: patientList
model: patientModel
delegate: E3DPatientListItem {
onClicked: {
if (patientList.currentIndex !== index)
{
patientList.currentIndex = index
detailStackView.push("DetailPanel.qml",
{ "view": view, "ptInfo": model })
...
详细面板:
...
Page {
property QtObject ptInfo
Timeline {
ptInfo: ptInfo // <- how do I pass this to Timeline?
...
Timeline.qml
...
Item {
property QtObject ptInfo // <- always null :(
...
...
Page {
property QtObject ptInfo
Timeline {
ptInfo: ptInfo // <- how do I pass this to Timeline?
...
您认为 ptInfo: ptInfo
取得了什么成就?您正在将 属性 绑定到它自己的标识符。
也许尽量不要使用相同的标识符以避免隐藏,或者给出 Page
和 id
然后 ptInfo: pageid.ptInfo
。 parent.ptInfo
也可以工作,只要对象有父级 属性 暴露,请记住 QtObject
不会 .
不过,你真的不需要在Timeline.qml
中有属性QtObject ptInfo
,只要一个时间轴总是在一个页面内被实例化,你就可以访问ptInfo
由于动态作用域,直接从时间线内部。请注意,动态范围属性仅适用于在特定 qml 文件的根元素中定义的属性:
// Obj1.qml
Item {
property int test: 7
Obj2{}
}
// Obj2.qml
Item {
Component.onCompleted: console.log(test) // it will work
}
一段时间以来,我一直在努力思考这个问题,想出了一些技巧,但 none 其中似乎是正确的方法。希望这是有道理的。假设我有三个 qml 文件。
第一个 QML:
...
ListView {
id: patientList
model: patientModel
delegate: E3DPatientListItem {
onClicked: {
if (patientList.currentIndex !== index)
{
patientList.currentIndex = index
detailStackView.push("DetailPanel.qml",
{ "view": view, "ptInfo": model })
...
详细面板:
...
Page {
property QtObject ptInfo
Timeline {
ptInfo: ptInfo // <- how do I pass this to Timeline?
...
Timeline.qml
...
Item {
property QtObject ptInfo // <- always null :(
...
...
Page {
property QtObject ptInfo
Timeline {
ptInfo: ptInfo // <- how do I pass this to Timeline?
...
您认为 ptInfo: ptInfo
取得了什么成就?您正在将 属性 绑定到它自己的标识符。
也许尽量不要使用相同的标识符以避免隐藏,或者给出 Page
和 id
然后 ptInfo: pageid.ptInfo
。 parent.ptInfo
也可以工作,只要对象有父级 属性 暴露,请记住 QtObject
不会 .
不过,你真的不需要在Timeline.qml
中有属性QtObject ptInfo
,只要一个时间轴总是在一个页面内被实例化,你就可以访问ptInfo
由于动态作用域,直接从时间线内部。请注意,动态范围属性仅适用于在特定 qml 文件的根元素中定义的属性:
// Obj1.qml
Item {
property int test: 7
Obj2{}
}
// Obj2.qml
Item {
Component.onCompleted: console.log(test) // it will work
}