【问题标题】:QML pass QtObject from one qml to anotherQML 将 QtObject 从一个 qml 传递到另一个
【发布时间】:2017-11-20 01:15:01
【问题描述】:

一段时间以来,我一直在尝试解决这个问题,并想出了一些技巧,但似乎没有一个是正确的方法。希望这是有道理的。假设我有三个 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?
...

时间线.qml

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

【问题讨论】:

  • 时间线{ ptInfo: parent.ptInfo } 呢?或 Page { 属性别名 ptInfo:timeline.ptInfo } ?
  • 我以为我已经尝试了所有方法,但Timeline{ ptInfo: parent.ptInfo } 确实有效!非常感谢。

标签: qt qml qtquick2


【解决方案1】:
...
Page {
    property QtObject ptInfo
    Timeline {
        ptInfo: ptInfo // <- how do I pass this to Timeline?
...

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

也许尝试不使用相同的标识符以避免阴影,或者给出Pageid,然后是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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    相关资源
    最近更新 更多