首先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++類為一個屬性沒有深入研究。