qiukeqian4677 2018-04-22 16:42 采纳率: 0%
浏览 5806
已结题

[QT Quick]同级的a,b两个qml文件,怎样在b.qml文件里调用a.qml.文件的一个值

一个桌面显示程序,主页面为Main.qml,主页面有一按钮进入次级页面设置一个长度值,set.qml文件里设置了这个长度值,怎么将这个值传到主页面的,用作其上一个部件的长度值?
main.qml
Item{
Imag{
id:b
height:(想要获取a的实时动态height:x)
}
}
set.qml
Common.Panel {
id: root
onBackClicked: {
G.back();
}
Item{
Base.text{
id:a
height:x
}
}
}

  • 写回答

2条回答

  • shen90pp 2018-07-30 07:55
    关注

    实现你的功能有N种方法:
    1. 如果你的Main.qml 是 mian.cpp载入的主页面, 那么 在Main.qml的 根节点处(即最外层括号内) 定义变量(比如变量 mySize), 那么这个mySize 在全局都是可以取到的(用根节点的Id.mySize 取)
    例如:
    Main.qml:
    Item{
    id: _main
    property real mySize: 0
    }
    Set.qml:
    Item{
    Button{
    text: "clicked"
    onClicked:_main.mySize += 5
    }
    }

    1. 如果你的次页面Set.qml 是直接写在主页面上的 例如这样:
      Item{
      id: _main
      Set{ id: _set }
      }
      那么 可以在Set 中的根节点处设置一个属性, 在Set中为属性复制, 在主页面上取值; 例如:
      Set.qml
      Item{
      id: _set
      property real mySize: 0
      }
      Main.qml:
      Item{
      Text{
      text: _set.mySize
      }
      Set{ id: _set}
      }

    2. 如果你的Set页面是通过容器加载的 如(Loader, StackView) 那么你可以直接用方法1, 或者 调用Loader.item StackView.get(index)/StackView.find()获取到Set的实例 再取Set中属性的值
      例如:
      Main.qml
      Item{
      Loader{
      id: _loader
      source: "Set.qml"
      }
      Text{
      text: _loader.status == Loader.Ready? _loader.item.mySize: 0
      }
      }

    3. 当然还有其他的方法 比如 Settings: 可以将参数"持久化",(参考 Qt事例Qt Quick Control 2 Gallery)
      或者在main.cpp中 用qmlRegisterSingletonType() 注册一个全局的对象 用法与1类似

    ....
    当然还有其他很多方法...

    评论

报告相同问题?

悬赏问题

  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题