[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
}
}
}

实现你的功能有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类似

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

在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;
}

}