QML 相互之间通讯 信号 槽

QML 之间 信号与槽

方式一:

对于 QML 中的属性如果其值发生改变, QML 自动会发生相关信号

onChanged 这种格式

举例:

MouseArea {
    onPressedChanged: console.log("value:" , pressed)
}

方式二: 比较适合在同一个 QML 文件内

signal ( type parameter, type parameter)

on

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:

}

Connections {
    target: mytest
    onTestT: {
        send21();
    }
}

 

你可能感兴趣的:(Qt/QML)