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