QT QML与C++混搭
“那些杀不死我的必使我更加强大”----尼采
QML与C++混合编程就是使用QML高效便捷地构建UI,而C++则用来实现业务逻辑和复杂算法。
ML访问C++
Qt集成了QML引擎和Qt元对象系统,使得QML很容易从C++中得到扩展,在一定的条件下,QML就可以访问QObject派生类的成员,例如信号、槽函数、枚举类型、属性、成员函数等。
QML访问C++有两个方法:一是在Qt元对象系统中注册C++类,在QML中实例化、访问;二是在C++中实例化并设置为QML上下文属性,在QML中直接使用。第一种方法可以使C++类在QML中作为一个数据类型,例如函数参数类型或属性类型,也可以使用其枚举类型、单例等,功能更强大。
C++类要想被QML访问,首先必须满足两个条件:
一是派生自QObject类或QObject类的子类
二是使用Q_OBJECT宏。
QObject类是所有Qt对象的基类,作为Qt对象模型的核心,提供了信号与槽机制等很多重要特性。这两个条件是为了让 一个 类 能够进入 Qt 强 大的 元 对象 系统( meta- object system), 只有 使用 元对象系统, 一个类的某些方法或属性才可能 通过字符串形式的名字 来 调用(??), 才具有了在QML中访问的基础条件。
Q_OBJECT宏必须在C++类的private区(C++默认为private)声明,用来声明信号与槽,使用Qt元对象系统提供的内容,位置一般在语句块首行。
一旦 你 导出 了 一个 类, 在 QML 中就 必然 要 访问 该类 的 实例 的 属性 或 方法 来 达到 某种 目的, C++类中 具有 什么 特征的 属性 或 方法 才可以被 QML 访问 呢?
(1) 信号、 槽
只要 是 信号 或者 槽, 都可 以在 QML 中 访问, 你 可以 把 C++ 对象 的 信号 连接 到 QML 中 定义 的 方法 上, 也可以 把 QML 对象 的 信号 连接 到 C++ 对象 的 槽 上, 还可以 直接 调用 C++ 对象 的 槽 或 信号…… 所以, 这是 最简单 好用 的 一种 途径。
(2) Q_ INVOKABLE 宏
在 定义 一个 类 的 成员 函数 时 使用 Q_ INVOKABLE 宏 来 修饰, 就可以 让 该 方法 被 元 对象 系统 调用。 这个 宏 必须 放在 返回 类型 前面。
程序例子:
构建Projects,选择Qt Quick Application。
需要注意的地方:
1) 在qml文件中使用C++对象的一个方法是,先生成一个对象,然后使用setContextProperty 函数将其注册到qml上下文中。这个生成的对象需要自己删除!
Ref:
http://blog.51cto.com/9291927/1975383
QT QML与C++混搭的更多相关文章
- Qt qml 单例模式
Qt qml 单例模式,没什么好说的,看代码吧.单例模式很适合做全局的配置文件. [示例下载] http://download.csdn.net/detail/surfsky/8539313 [以下是 ...
- Qt qml listview 列表视图控件(下拉刷新、上拉分页、滚动轴)
Qt qml listview下拉刷新和上拉分页主要根据contentY来判断.但要加上顶部下拉指示器.滚动条,并封装成可简单调用的组件,着实花了我不少精力:) [先看效果] [功能] 下拉刷新 ...
- qt qml qchart 图表组件
qt qml qchart 图表组件 * Author: Julien Wintz * Created: Thu Feb 13 23:41:59 2014 (+0100) 这玩意是从chart.js迁 ...
- qt qml中PropertyAnimation的几种使用方法
qml文章 qt qml中PropertyAnimation的几种使用方法 动画应用场景有以下几种: 首先如果一个Rectangle.动画是要改变它的x和y值 1,Rectangle一旦被创建,就要移 ...
- Qt QML referenceexamples attached Demo hacking
/********************************************************************************************* * Qt ...
- Qt qml的软件架构设计
google: qt qml application architecture 有很多资源. 1 https://www.ics.com/blog/multilayered-architecture- ...
- QT QML目录导航列表视图
[功能] /目录.文件 /文件过滤 /递归 /事件 /高亮当前行 /当前选项 /目录切换动画 /限制根目录 [下载]:http://download.csdn.net/detail/surfsky/8 ...
- Qt(QML)本地化
Internationalization and Localization with Qt Quick 程序国际化 1) Use qsTr() for all Literial UI strings ...
- qt qml 利用xmlhttprequest 调用有赞api
最近朋友在有赞商城上面开了一个店铺,因为有实体店,一般卖商品后送货上门,但是打票时候老是人工用world文档人工复制黏贴订单打印小票, 所以就找我帮忙做一个软件专门打印小票的,就研究起来调用有赞第三方 ...
随机推荐
- python遇到动态函数---TypeError: unbound method a() must be called with A instance as first argument (got nothing instead)
TypeError: unbound method a() must be called with A instance as first argument (got nothing instead) ...
- Pycharm 主题背景色的配置
PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具.那么它的主题背景如何设置呢? 具体操作: 步骤一:选择 “file” 菜单下的 “se ...
- Python 代码混淆和加密技术
动机 Python进行商业开发时, 需要有一定的安全意识, 为了不被轻易的逆向. 混淆和加密就有所必要了. 混淆 为了增加代码阅读的难度, 源代码的混淆非常必要, 一个在线的Python代码混淆网站. ...
- Stirling数入门
第一类Stirling数 定义 $$\begin{aligned}(x)_n & =x(x-1)...(x-n+1)\\&= s(n, 0) + s(n,1)x +..+s(n,n)x ...
- 11-Flutter移动电商实战-首页_屏幕适配方案和制作
1.flutter_ScreenUtil插件简介 flutter_ScreenUtil屏幕适配方案,让你的UI在不同尺寸的屏幕上都能显示合理的布局. 插件会让你先设置一个UI稿的尺寸,他会根据这个尺寸 ...
- know thself
- .net web开发——文件的上传和下载
以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载. 准备文件上传的API #region 文件上传 ...
- Lightning Web Components 安装试用(一)
Lightning Web Components 简称(lwc) 是一个快速企业级的web 组件化解决方案,同时官方文档很全,我们可以完整的 学习lwc 项目结构 使用npx 官方提供了一个creat ...
- 在Matlab中画图输出
在Matlab中画图后,可能会调整格式.输出存储时,格式会忽然消失. 可以修改右下边Export setup,将Font size设置成auto. 这样就保留了编辑效果.
- GoCN每日新闻(2019-10-16)
GoCN每日新闻(2019-10-16) GoCN每日新闻(2019-10-16) 1. 持续的性能分析与优化 https://medium.com/@tvii/continuous-profilin ...