文章目录
前言
本文主要介绍如何在QML 中调用C++ 代码中实现的函数,至于C++ 中如何调用 QML 后续的文章会进行介绍
软硬件环境:
硬件:PC
软件:windows11 Qt5.12.2
一、qml 和 c++ 交互的官方文档介绍
目前Qt 应用的框架是,qml 负责UI ,则C++负责具体的后台逻辑, 故它俩之间的交互对 Qt 至关重要
如下图所示, 是Qt 帮助文档中对 QML 和 C++ 交互的方法的相关介绍
二、QML 中调用 C++ 实现的函数的方法
1. Exposing Attributes of C++ Types to QML
如下图所示,是Qt 官方帮助文档对 暴露 C++ 的属性到QML 的描述, 主要是暴露三种类型:
- Properties
- Methods(槽函数和Q_INVOKABLE 修饰的函数)
- Signals
1.1 暴露 Properties
暴露 Properties 使用的是 Q_PROPERTY() macro,如下图所示,是Qt 官方帮助文档的相关描述
1.2 暴露 Methods(槽函数和Q_INVOKABLE 修饰的函数)
如下图所示,是Qt 官方帮助文档对暴露 Methods 的相关描述
1.3 暴露 Signals
如下图所示,是Qt 官方帮助文档对暴露 Signals 的相关描述
2. Defining QML Types from C++
如下图所示,是Qt 官方帮助文档对定义一个由C++ 实现的QML Types 的相关描述
如下图所示,是Qt 官方帮助文档对注册一个由C++ 实现的QML Types 的相关描述,主要是用 qmlRegisterType()来实现的
Qt 官方实例如下图所示
3. 代码实例
3.1 创建一个QML 工程
详见我之前的文章 使用Qt Creator 创建 一个 QML 工程(一)
3.2 创建一个由C++ 实现的QML Type
创建一个名为MyType的 QML Type, 右击工程名,选择Add New, 如下图所示
然后选择 C++ Class, 如下图所示
然后设置Class 名为MyType, Bass class 选择 QObject, 点击下一步后,就会在当前工程中生成名为mytype.h 和 mytype.cpp 的文件
生成mytype.h 和 mytype.cpp 的文件后,修改mytype.h 和 mytype.cpp 的内容如下
这里使用 Q_INVOKABLE 来暴露c++ 的函数给QML
#ifndef MYTYPE_H
#