一个桌面显示程序,主页面为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
}
}
}
实现你的功能有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
}
}
如果你的次页面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}
}
如果你的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
}
}
当然还有其他的方法 比如 Settings: 可以将参数"持久化",(参考 Qt事例Qt Quick Control 2 Gallery)
或者在main.cpp中 用qmlRegisterSingletonType() 注册一个全局的对象 用法与1类似
....
当然还有其他很多方法...
在main.qml 中添加如下代码
item{
set{
id:set1
}
function setLength()
{
set1.setLength(400);
// var len = set1.length; //可以直接调用set中的root层级的属性
}
}
set.qml 代码
item{
id:root
var length:200
function setLength(length)
{
root.length = length;
}
}