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

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