QML和C++相互调用总结

 

首先C++的类必须继承自QObject,而且在。H里面必须声明Q_OBJECT

 

Q_ENUMS(GenerateAlgorithm)     //声明一个枚举类型到qml里面用                                                        GenerateAlgorithm是一个枚举类型,要在QML使用必须使用Q_ENUMS声明

Q_PROPERTY(QColorcolorREADcolorWRITEsetColorNOTIFYcolorChanged)        //声明一个属性,在QML里面用

这里是声明一个类的属性,属性名是color读取就是color写这个属性就是调用setcolor函数。在QML里面直接是用.color来调用这个属性和里面的text等一个样。

Q_INVOKABLEvoidsetAlgorithm(GenerateAlgorithmalgorithm);

这个声明一个函数,可以直接在QML里面调用,直接使用. setAlgorithm调用这个函数。

colorMaker.setAlgorithm(ColorMaker.LinearIncrease);这个是QML里面的调用这个函数的方式。

 

然后再C++里面的信号和槽可以直接在QML里面调用而不需要特别的声明。

signals:

    voidcolorChanged(constQColor&color);

    voidcurrentTime(constQString&strTime);

 

publicslots:

    voidstart();

    voidstop();

例如上面是C++里面定义的信号和槽在QML里面调用如下:

onClicked:{

            colorMaker.stop();     //槽可以像函数一样直接调用

        }

信号使用如下方式捕捉:

Connections{

        target:colorMaker;

        onColorChanged:{

            colorRect.color=color;

             console.log("Coloris",color);

        }

}

 

Component.onCompleted:的作用像是构造函数一样,就是一个初始化函数。

 

main函数里面需要注册c++类如下:

  qmlRegisterType<ColorMaker>("an.qt.ColorMaker",1,0,"ColorMaker");

这样在QML里面加入头文件importan.qt.ColorMaker1.0就可以调用这个类了。

还有一种方法注册c++类为一个属性没有深入研究。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值