qml和c++进行交互

本文介绍了如何在QML中调用C++函数,包括定义头文件、注册C++类、导入并使用、以及通过信号槽机制实现两者间的通信。详细步骤包括注册C++类型、在QML中导入并调用,以及两种连接信号槽的方法。
摘要由CSDN通过智能技术生成

qml调用C++函数

1.定义头文件和cpp文件
2.在main.cpp中进行注册

 // 注册c++类到qml  参数分别为导入的 模块名称  主版本号  次版本号  模块名称
    qmlRegisterType<CppObject>("CppObject",1,0,"CppObject");

3.在qml中导入

import CppObject 1.0

  CppObject{
        id:cppobj
    }
    

4.通过id+方法名的方式调用
注意:

   // 加上这个宏,当前函数就可以被qml访问调用
    Q_INVOKABLE void func();

qml定义信号连接C++的槽函数

第一种方法

// 定义信号
signal qmlSig(int i, string s)

Button{
   onClicked: {
         qmlSig(10,"zhangsan")
     }
    }
    Connections{
        target: window
        function onQmlSig(i,s){
            cppobj.cppSlot(i,s)
        }
    }

    Component.onCompleted: {
        qmlSig.connect(cppobj.cppSlot)
    }

第二种通过c++连接:
在main.cpp中如下:
需要注意要给组件设置objectName

  // engine 加载完成后 load以后
   auto list = engine.rootObjects();
   //auto objName = list.first()->objectName(); // 获取第一个objname
//   auto mybuttonObj = list.first()->findChild<QObject *>("mybutton");

   auto window = list.first();
	
	// 第一个参数为组件
	// 第二个为信号名
	// 第三个为类的实例化
	// 第三个为槽函数
   QObject::connect(window,SIGNAL(qmlSig(int,QString)),
                    CppObject::getInstance(),SLOT(cppSlot(int,QString)));
  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值