Qml-Item的Id生效范围
前置声明
- 本实例在Qt6.5版本中做的验证
- 同一个qml文件中,id是唯一的,即不同有两个相同id 的Item;当前qml文件中声明的id在当前文件中有效(即如果其它组件中传入的id,与当前qml文件中id 相同,当前qml文件中id生效)
- 在父级qml文件中声明的id,可以传递给子集的qml文件中使用
- 实例由4个qml文件组成:主qml ( ItemIdScopeTest.qml): 由3个子qml组件元素;子qml1(ItemIdGDataPro.qml)定义了一个纯属性的Item,另两个子qml(ItemIdComponent_1.qml,ItemIdComponent_2.qml)中由一个Rectangle元素组成
Item Id生效范围 实例代码
- ItemIdGDataPro.qml文件,定义了id名称和两个color属性, 代码如下:
import QtQuick
//由于测试Item中id 作用范围和影响
Item{
id:idGDataPro
property color reColor1: "blue"
property color reColor2: "green"
onReColor1Changed: {
console.log("reColor___1 Changed");
}
onReColor2Changed: {
console.log("reColor___2 Changed");
}
}
2.ItemIdComponent_1.qml 文件内容如下
import QtQuick
//用于测试Item中id 作用范围和影响
Item{
ItemIdGDataPro{
id:idGDataPro
property color reColor1: "blue"
}
Rectangle{
id:idComp1
width: 100
height: 100
color: idGDataPro.reColor1
}
}
3.ItemIdComponent_2.qml 文件内容如下
import QtQuick
//由于测试Item中id 作用范围和影响
Item{
Rectangle{
id:idComp2
width: 100
height: 100
//Comp2 中 idGDataPro.reColor2
color: idGDataPro.reColor2
}
}
3.ItemIdScopeTest.qml 文件,使用其它3个 子qml 元素,内容如下
import QtQuick
//由于测试Item中id 作用范围和影响。
//1.在同一个qml中不能有Item 有相同的id;
//1.在qml文件中,定义的id 优先级最高
//2.在父qml文件中,设置其它Item的id,包含在父qml文件中其它组件所在qml中可以使用此id的属性
Item{
height: 480
width: 320
Rectangle{
anchors.fill: parent
ItemIdGDataPro{
id:idGDataPro
}
ItemIdComponent_1{
id:idComp1
x:20
y:20
}
ItemIdComponent_2{
id:idComp2
x:150
y:20
}
}
}
结果:
1.ItemIdScopeTest.qml 文件中定义的Id,可以在ItemIdComponent_2.qml中使用;
2.ItemIdComponent_1.qml 中定义了相同Id名称的“ idGDataPro”,在ItemIdComponent_1.qml文件中就使用了自身定义的“idGDataPro”;
3.实验验证方式:可以通过添加onXXXChanged() 函数(XXX代表定义的属性),来验证是哪个对应属性发生了改变
Item Id生效范围效果
1.可验证:
a.主qml中不定义ItemIdGDataPro 对象,,在子qml组件中使用ItemIdGDataPro 的属性效果。
b.主qml中定义ItemIdGDataPro 对象,,在某个子qml组件中定义主qml同样属性Id的对象,修改主qml中ItemIdGDataPro 对象属性值,查看是否影响子qml中属性值。