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

本文详细介绍了如何通过C++扩展QML,包括注册类型、输出对象、属性、方法、信号、属性绑定、枚举、自定义属性类型以及生成插件的步骤,提供多个实例演示了C++与QML之间的交互操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

例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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值