QML的解释引擎集成了Qt的元对象系统,允许实现QML与C++混合编程。
集成QML和C++可以实现以下目的:
(1)分离用户交互界面和后端应用逻辑代码;
(2)在QML中调用C++函数功能(数据模型或第三方的C++库);
(3)通过C++实现自定义的QML object types;
为了在QML中调用C++函数功能,必须定义QObject派生类的C++类,类定义好之后就可以在QML中以以下三种方式调用:
(1)C++类注册成一个实例化的QML type对象,在QML中以QML object types形式调用;
(2)C++类注册成一个非实例化的QML type(比如Singleton-type),在QML中不需要实例化对象就可以访问其属性、方法和信号;
(3)C++类的实例作为 context property 或context object 嵌入到QML中,可以访问其属性、方法和信号;
当然,QML模块也可以在C++中调用,因为所有的QML object types都是QObject的派生类,也就意味着所有的QML object types都可以在C++中通过Qt的元对象系统动态创建和调用,但并不推荐这样使用,因为这样又使前端UI与后端数据和逻辑又混在一起。