QML 之间 信号与槽
方式一:
对于 QML 中的属性如果其值发生改变, QML 自动会发生相关信号
on<Property>Changed 这种格式
举例:
MouseArea {
onPressedChanged: console.log("value:" , pressed)
}
方式二: 比较适合在同一个 QML 文件内
signal <name> ( type parameter, type parameter)
on<Name>
signal testSignal(real x, real b)
testSignal(x, b) //执行 也就是 发送信号 类似 quick 中的 emit signal()
onTestSignal: console.log("xxx")// 槽 用于接收信号
举例:
Item {
signal clickTest();
MouseArea {
onPressed: {
clickTest()
}
}
onClickTest: consloe.log("received")
}
方式三:适合一对多或者跨 QML
断开就使用 disconnect 就好
1 : 跟信号在同一个范围,可这么写
signal sendSignal();
MouseArea {
sendSignal()
}
Component.onCompleted: {
sendSignal.connect(send21)
sendSignal.connect(send22)
sendSignal.connect(send23)
}
function send21() {
console.log("1: received signal");
}
function send22() {
console.log("2: received signal");
}
function send23() {
console.log("3: received signal");
}
2: 如果与信号不在同一范围
MyTest {
signal testT()
id : mytest
MouseArea {
onPressed: {
mytest.testT()
}
}
}
Component.onCompleted: {
mytest.testT.connect(send21) // mytest.testT.disconnect(send21)
mytest.testT.connect(send22)
mytest.testT.connect(send23)
}
function send21() {
console.log("1: received signal");
}
function send22() {
console.log("2: received signal");
}
function send23() {
console.log("3: received signal");
}
3、Connections 最主要的优势可以连接到没有定义在 QML 的东西
格式:
Connections {
target: 信号的来源
on<Signal>:
}
Connections {
target: mytest
onTestT: {
send21();
}
}