C++侧发送信号,QML槽接收

这篇博客介绍了如何在C++中创建一个单例类,通过信号传递数据到QML界面进行显示。QML通过Connections组件绑定C++的信号,并在接收到信号时执行相应的槽函数。C++侧使用QML引擎查找并连接QML对象的槽,注意C++信号的参数需为QVariant类型以匹配QML槽。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这种应用场景,我的理解是C++类负责一些业务的控制,然后把结果数据通过信号的方式传递给QML端进行展示,使用这种方式C++侧的控制类是一个单例类,然后使用下面的代码进行注册。

qmlRegisterSingletonInstance("MyObj", 1, 0, "MyObject", new MyObject());

在QML侧绑定C++信号

在QML侧绑定使用Connections即可,槽函数的名字的规则是,c++信号函数名前面加on关键字

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.5
import MyObj 1.0

Window {
    id : window
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")
    
// MyObject已经注册为一个单例类了,所以不需要ID进行引用
    Connections {
        target: MyObject // 在C++中注册的单例类
        function onCppSig(s, i){ // 这里C++侧的信号是CppSig,前面加on
            console.log(s, i)
        }
    }
}

在C++侧绑定

在C++侧绑定需要使用QML引擎查找qml侧要绑定槽的对象,首先获取到根元素对象,然后进行遍历找到想要的qml对象

在QML侧创建槽函数


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值