在组件之间通信,在QML中使用信号槽,并且有时需要携带参数,比如下面组件:
less
Rectangle {
id: root
implicitWidth: 849
implicitHeight: 480
color: "#ffffff"
radius: 15
property string title1 : qsTr("Aux Temp Zone 1")
property string title2 : qsTr("Aux 1 Name")
property string auxTempZoneSwitchStatus //辅助温区Switch状态,0表示关闭,1表示开启
signal auxTempZoneSwitchChangeSignal(string checked) //辅助温区Switch状态变化,0表示关闭,1表示开启
在这里定义一个信号,使用signal
关键字,注意这里可以使用string
类型,然后在发射信号的地方直接调用即可:
scss
onCheckedChanged: {
auxTempZoneSwitchChangeSignal(getSwitchStringStatus(checked))
}
接着就可以定义处理该信号的槽函数了:
less
AuxTempItem{
id: item1
width: 849
height: 477
anchors.top: parent.top
anchors.horizontalCenterOffset: 1
anchors.topMargin: 52
anchors.horizontalCenter: parent.horizontalCenter
auxTempZoneSwitchStatus: GCDataPool.auxiliaryHeator1_config
Connections{
target: item1
function onAuxTempZoneSwitchChangeSignal(value) {
console.log("onAuxTempZoneSwitchChangeSignal AuxTempItem", value)
GCDataPool.auxiliaryHeator1_config = value;
}
}
}
这里使用Connections
关键字,第一个参数是target
指明信号发出的对象,第二个参数必须是以function
开头,on
+信号名+(参数) 的形式,这个形式有2点需要注意:
- 必须是on开头,加上信号的名字,以大写开始。
- 参数不必声明类型,比如这里的
(value)
,比如写成(string value)
。
如果我们还是以lambda的方式,比如下面这种:
ini
Connections{
target: item1
onAuxTempZoneSwitchChangeSignal: {
console.log("AuxTempItem", value)
GCDataPool.auxiliaryHeator1_config = value;
}
}
就会报错:# QML Connections: Implicitly defined onFoo properties in Connections are deprecated.