QML自定义带参数信号槽

在组件之间通信,在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.

相关推荐
码农客栈5 小时前
qt QNetworkRequest详解
qt
Say-hai5 小时前
QT6 + CMAKE编译OPENCV3.9
qt·opencv
威桑9 小时前
关于QLineEdit 添加的QAction图标的交互问题
qt
island131417 小时前
【QT】 控件 -- 显示类
开发语言·数据库·qt
FancySuMMer1117 小时前
关于av_get_channel_layout_nb_channels函数
qt·ffmpeg
行十万里人生19 小时前
Qt 控件与布局管理
数据库·qt·microsoft·华为od·华为·华为云·harmonyos
daqinzl19 小时前
Qt调用ffmpeg库录屏并进行UDP组播推流
qt·ffmpeg·udp组播 推流
daqinzl19 小时前
Qt调用FFmpeg库实时播放UDP组播视频流
qt·ffmpeg·udp组播流
咬光空气1 天前
Qt 5.14.2 学习记录 —— 십구 事件
数据库·qt·学习
geovindu2 天前
Qt Designer and Python: Build Your GUI
开发语言·qt