qml学习1 --c++扩展qml

看了一些例子,记录了一些要点,只是一点笔记,并不是一个完整的文档。

例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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章