qml和c++进行交互

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
    评论
在使用Qt Quick时,我们可以使用QMLC++进行交互QML是一种声明性语言,用于设计用户界面和定义交互逻辑,而C++则通常用于处理底层逻辑和业务逻辑。 为了在QML中调用C++的代码,我们可以通过在C++中注册一个类型到QML中。在C++中,我们可以使用Q_INVOKABLE宏将一个函数或者成员函数注册为可在QML中调用的函数。例如: ```cpp // MyObject.h #ifndef MYOBJECT_H #define MYOBJECT_H #include <QObject> class MyObject : public QObject { Q_OBJECT public: explicit MyObject(QObject *parent = nullptr); Q_INVOKABLE void helloWorld(); }; #endif // MYOBJECT_H ``` 然后在C++中实现该函数: ```cpp // MyObject.cpp #include "MyObject.h" MyObject::MyObject(QObject *parent) : QObject(parent) { } void MyObject::helloWorld() { qDebug() << "Hello World!"; } ``` 接下来,在我们的QML文件中引入该对象并调用该函数: ```qml import QtQuick 2.0 Item { MyObject { id:myObject } Button { text: "Click me" onClicked: { myObject.helloWorld(); } } } ``` 当点击按钮时,QML将调用MyObject对象中的helloWorld函数,并在应用程序的输出中打印“Hello World!”。 除了使用Q_INVOKABLE宏,我们还可以在C++中使用信号和槽机制来实现QMLC++交互。在C++中使用Q_PROPERTY宏可以将C++属性暴露给QML使用,使得QML可以监控和操作该属性。 通过这些方式,我们可以实现QMLC++交互,从而达到更好的分工和功能实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值