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

[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 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序