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 取得了什么成就?您正在将 属性 绑定到它自己的标识符。

也许尽量不要使用相同的标识符以避免隐藏,或者给出 Pageid 然后 ptInfo: pageid.ptInfoparent.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
}