看了一些例子,記錄了一些要點,只是一點筆記,並不是一個完整的文檔。
例1 c++輸出對象
cpp文件
qmlRegisterType<PieChart>("Charts", 1, 0, "PieChart"); //c++對象名,參數:模塊名,版本號,版本號2,對象名
view.setSource(QUrl::fromLocalFile("app.qml")); //加載qml文件
class PieChart : public QDeclarativeItem
qml文件
import Charts 1.0
PieChart {
...
}
例2 c++輸出屬性 (接例1)
cpp定義中
class PieChart : public QDeclarativeItem
{
Q_PROPERTY(QString name READ name WRITE setName)
}
qml中
PieChart {
name: "A simple pie chart"
}
例3 c++輸出方法 (接例2)
cpp定義中
class PieChart : public QDeclarativeItem
{
Q_INVOKABLE void clearChart();
}
qml中
PieChart {
id: aPieChart
}
aPieChart.clearChart()
例4 c++輸出signal (接例3)
cpp定義中
class PieChart : public QDeclarativeItem
{
signals:
void chartCleared();
}
qml中
PieChart {
id: aPieChart
onChartCleared: console.log("The chart has been cleared")
}
例5 屬性綁定
cpp定義中
class PieChart : public QDeclarativeItem
{
Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
signals:
void colorChanged();
}
qml中
PieChart {
id: chart1
}
PieChar {
id: chart2
color: chart1.color
}
例6 輸出枚舉
cpp文件中
public:
enum DisplayMode {
MultiLevel,
Exploded,
ThreeDimensional
};
qml文件中可以使用PieChart.Exploded來訪問,但enum值不是數字
例7 定義屬性類型
cpp文件
Q_PROPERTY(PieSlice* pieSlice READ pieSlice WRITE setPieSlice)
qmlRegisterType<PieSlice>("Charts", 1, 0, "PieSlice");
class PieSlice : public QDeclarativeItem
qml文件可以像pieChart一樣訪問
例8 定義屬性類型 (基於例7)
cpp文件
Q_PROPERTY(QDeclarativeListProperty<PieSlice> slices READ slices)
public:
QDeclarativeListProperty<PieSlice> slices();
qml文件
PieChart{
slices: [
PieSlice {}
PieSlice {}
PieSlice {}
]
}
例9 生成plugin
pro文件
CONFIG += qt plugin
QT += declarative
cpp文件
需要新建QDeclarativeExtensionPlugin的子類,實現registerTypes()方法,並export,生成so文件
可以使用qmlviewer(以及配置qmldir打開)
參考
-qt文檔
-qt code examples/tutorials/extending
qml學習1 --c++擴展qml
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.