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++类为一个属性没有深入研究。

 

你可能感兴趣的:(QML和C++相互调用总结)