网站建设 全网推广百度电话号码查询
目录
- 信号与槽函数基础
- 方法1-使用Connections
- 方式2-使用connect(不常用)
- 自定义组件与信号槽使用
信号与槽函数基础
方法1-使用Connections
main.qml
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15Window {id:windowwidth: 640height: 480visible: truetitle: qsTr("Hello World")//信号signal testSig(string s,int value)//Connections绑定信号和槽函数Connections{//发送信号组件idtarget:window//槽函数(使用On+信号名) 这种方式不被推荐onTestSig:{console.log(s,value)}}//点击按钮发送信号Button{width:50;height:50onClicked: {testSig("发送textSig信号","999")}}
}
上面的方式可读性太差,一般采用下面的方式
main.qml
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15Window {id:windowwidth: 640height: 480visible: truetitle: qsTr("Hello World")//信号signal testSig(string s,int value)//Connections绑定信号和槽函数Connections{//发送信号组件idtarget:window//槽函数(推荐使用这种 信号名+参数列表 的槽函数形式)function onTestSig(str,iValue){console.log(str,iValue)}}//点击按钮发送信号Button{width:50;height:50onClicked: {testSig("发送textSig信号","999")}}
}
方式2-使用connect(不常用)
//main.qml
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15Window {width: 640height: 480visible: truetitle: qsTr("Hello World")//信号signal testSig(string s,int value)//槽函数function func(s,v){console.log(s,v);}//组件加载结束时绑定信号和槽函数组件加载结束时绑定信号和槽函数Component.onCompleted: {testSig.connect(func)}//点击按钮发送信号Button{width:50;height:50onClicked: {testSig("发送textSig信号","999")}}
}
上面两种方式的运行结果如下:
自定义组件与信号槽使用
//main.qml
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15Window {id:windowwidth: 640height: 480visible: truetitle: qsTr("Hello World")//组件Component{id:comButton{//按钮signal btnSig(int value)//定义信号onClicked: {btnSig(10)//发送信号}}}//加载自定义组件MyComponent{//按钮组件挂载到自定义组件中com1: comcom2: com}
}
//myComponent.qml
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15Rectangle {width:400height:300property Component com1property Component com2border.color:"black"//动态加载组件Loader{id:loader1sourceComponent: com1anchors.bottom: parent.bottomanchors.bottomMargin: 20anchors.right: parent.rightanchors.rightMargin: 20//连接信号和槽Connections{target:loader1.itemignoreUnknownSignals: true//忽略不知道的的信号(防止报出警告)function onBtnSig(value){console.log("right:"+value)}}}//动态加载组件Loader{id:loader2sourceComponent: com2anchors.bottom: parent.bottomanchors.bottomMargin: 20anchors.right: parent.rightanchors.rightMargin: 150//连接信号和槽Connections{target:loader2.itemignoreUnknownSignals: true//忽略不知道的的信号function onBtnSig(value){console.log("left:"+value)}}}
}