QML将QtObject从一个qml传递到另一个qml

时间:2017-11-20 01:15:01

标签: qt qml qtquick2

我一直试图绕过这一段时间,并想出了几个黑客,但似乎没有一个是正确的方法。希望这是有道理的。假设我有三个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 })

...

DetailPanel:

...
Page {
    property QtObject ptInfo
    Timeline {
        ptInfo: ptInfo // <- how do I pass this to Timeline?
...

Timeline.qml

...
Item {
    property QtObject ptInfo // <- always null :(
...

1 个答案:

答案 0 :(得分:1)

...
Page {
    property QtObject ptInfo
    Timeline {
        ptInfo: ptInfo // <- how do I pass this to Timeline?
...

您认为ptInfo: ptInfo正在实现什么目标?您将属性绑定到自己的标识符。

也许尝试不使用相同的标识符来避免阴影,或者提供Pageid然后ptInfo: pageid.ptInfo。只要对象公开了父属性,parent.ptInfo也会起作用,请记住QtObject

但是,您并不需要在QtObject ptInfo中拥有属性Timeline.qml,只要时间轴始终在页面内实例化,您就可以直接从ptInfo访问由于动态范围,在时间轴内。请注意,动态范围属性仅适用于在特定qml文件的根元素中定义的属性:

// Obj1.qml
Item {
  property int test: 7
  Obj2{}
}

// Obj2.qml
Item {
  Component.onCompleted: console.log(test) // it will work
}