QML与C++混合编程(一)

该系列文章主要参考官方文档:英文文档

概述

  QML可以轻松地通过C++代码进行扩展,一方面,QML模块中的类允许C++对QML对象进行加载和操作,另一方面,由于原生QML引擎和Qt元对象系统的集成,QML可以直接调用C++的功能。这使得开发者可以同时使用QML、JavaScript和C++进行混合应用的开发。


  QML和C++的集成有以下几个好处:

  • 将界面和后台逻辑分离,界面通过QML和JavaScript实现,后台处理利用C++进行

  • 在QML中使用和调用C++的功能(比如调用程序逻辑、使用C++实现的数据模型或者调用第三方库里面的函数)

  • 访问QML和Qt Quick C++ API中的功能(比如利用 QQuickImageProvider动态生成图片)
  • 通过C++实现自己的QML对象类型,这些自定义对象类型既可以自己使用,也可以提供给他人使用

  为了将C++的数据或者函数提供给QML,QML必须从QObject的派生类中获得。由于QML引擎和云对象系统的集成,任何QObject派生类中的属性、方法和信号都对QML开放(参见文章《QML获得C++类中的属性》)。

  QML可以通过下面的几种方式来获取C++类中的特性:

  • 可以将C++类注册成为可以实例化的QML类型,将类实例化后就可以像普通的QML对象那样进行使用
  • 可以将类注册成为单例类型,将类的实例通过QML代码导入后,QML可以实现对其属性、方法和信号的访问
  • 可以将类的实例作为上下文属性上下文对象嵌入到QML代码中,这样就允许QML对其属性、方法和信号的访问

  以上是最普遍的从QML代码访问C++功能的方法,更多的选项和细节会在下面的部分讲到。另外,除了从QML中访问C++功能,反过来,QML模块也提供了从C++代码中操作QML对象的方法(参见文章《在C++中与QML对象进行交互》)。

  最后,C++代码既可以集成到一个C++应用中,也可以集成到一个插件中,这取决于要发布的是一个单独的应用还是一个库。插件可以和QML模块进行集成,之后可以在其他应用中将它们导入到QML代码中进行使用(参见《在C++插件中为QML提供类和功能的访问》)

选择C++和QML的正确集成方法

参考下面的流程图:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/guimaxingtian/article/details/81082119