QML与C++混合编程

文章参考:
https://blog.csdn.net/foruok/article/details/32698603
http://blog.51cto.com/9291927/1975383

QT项目开发过程中,画面上显示的布局以及对应的数据可能会动态变化,如果只用QML来构件简单的布局是无法满足需求的,所以会用通过C++代码来实现业务逻辑,QML负责构件UI。这里用到MVC模式的思想。
QML与C++混合编程简介
QML与C++混合编程就是使用QML高效便捷地构建UI,而C++则用来实现业务逻辑和复杂算法。

Qt Quick与QML
Qt Quick是Qt User Interface Creation Kit的缩写。
QT框架简介中可以了解到,QML (Qt Meta-Object Language的缩写)其实是对 JavaScript 的扩展,是Qt Quick最重要的组成部分。
Qt Quick包含一个组件集合,大部分用于图形界面。同时也包含一个用于管理组件并与组件交互的C++ API——QtDeclarative模块,用于QML与C++之间的桥梁。
C++与QML的交互通过向QML注册C++对象实现,其中C++实现中,非可视化的类均为QObject的子类,可是化的类型均为QDeclarativeItem的子类,而QDeclarativeItem等同于QML的Item类。

QML 中使用 C++ 类和对象
Qt 提供了两种在 QML 环境中使用 C++ 对象的方式:

  1. 在 C++ 中实现一个类,注册到 QML 环境中, QML 环境中使用该类型创建对象;
  2. 在 C++ 中构造一个对象,将这个对象设置为 QML 的上下文属性,在 QML 环境中直接使用改属性.
    不管哪种方式,对要导出的 C++ 类都有要求,不是一个类的所有方法、变量都可以被 QML 使用,因此我们先来看看怎样让一个方法或属性可以被 QML 使用。

C++类的实现
C++类要想被QML访问,首先必须满足两个条件:

  1. 派生自QObject类或QObject类的子类;
  2. 二是使用Q_OBJECT宏。
    这两个条件跟QT信号和槽的实现一样,是为了让一个类能够进入 Qt 强大的元对象系统(meta-object system)中,只有使用元对象系统,一个类的某些方法或属性才可能通过字符串形式的名字来调用,才具有了在 QML 中访问的基础条件。

信号与槽实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值