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.

相关推荐
ZouZou老师12 小时前
Linux Qt出现xcb异常问题解决办法
开发语言·qt
雁门.113 小时前
qt封装dll及调用
开发语言·qt
办公自动化软件定制化开发python13 小时前
基于PyQt5开发的文件智能查找工具,开源思路+完整实现,解决办公文件检索痛点
开发语言·qt
深蓝海拓14 小时前
PySide6,QEventLoop.exec()的使用
笔记·python·qt·学习·pyqt
_OP_CHEN14 小时前
【从零开始的Qt开发指南】(二十)Qt 多线程深度实战指南:从基础 API 到线程安全,带你实现高效并发应用
开发语言·c++·qt·安全·线程·前端开发·线程安全
qq_4017004115 小时前
CardLayout 实现自定义布局
qt
A星空12315 小时前
3519Hisidv500的QT配置
开发语言·qt
KeLin&15 小时前
讯为iTOP4412-Qt5.7环境搭建
开发语言·arm开发·qt·arm
Main. 2416 小时前
从0到1学习Qt -- Qt3D入门
开发语言·qt·学习
草莓熊Lotso16 小时前
Qt 信号与槽深度解析:从基础用法到高级实战(含 Lambda 表达式)
java·运维·开发语言·c++·人工智能·qt·数据挖掘