看了一些例子,记录了一些要点,只是一点笔记,并不是一个完整的文档。
例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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.