67 0

[作业] QT6实战-QML与C++联合编程教程 [推广有奖]

  • 0关注
  • 1粉丝

硕士生

58%

还不是VIP/贵宾

-

威望
0
论坛币
3 个
通用积分
20.6178
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1467 点
帖子
90
精华
0
在线时间
69 小时
注册时间
2021-5-4
最后登录
2024-6-13

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
在现代软件开发中,图形用户界面(GUI)是用户与程序交互的重要组成部分。Qt框架提供了一种强大的方式来构建跨平台的GUI应用程序,其中QML(Qt Meta-Object Language)和C++的交互是一个重要的主题。本篇博文将深入探讨如何在QML中创建和操作C++对象,实现双向的交互。

在Qt中,任何QML代码都可以访问QObject派生类实例的属性、方法和信号。以下是一个简单的C++类CppObject,演示了如何在QML中创建并操作该类的对象。

由于QML引擎与Qt元对象系统的集成,可以从QML中访问任何从QObject继承的类的属性、方法和信号,C++代码既可以在应用中集成,也可以在插件中集成。
QML访问C++数据主要有三种方法:
1、将C++ 类的属性暴露给QML;
2、从C++ 定义QML类型;
3、用Context属性在QML中嵌入C++对象;

自定义数据类型
16种基础数据类型以外的其它数据类型是QML所无法识别的,可将它定义为复杂数据类型,结构体数据类型属于复杂数据类型中的一种。由于QObject子类都可以注册为QML对象类型,所以构造结构体对应的自定义类来与QML交互是可行的。

创建自定义对象
在Qt中,我们可以使用QObject作为基类创建自定义对象。首先,我们需要在C++中定义一个继承自QObject的类,并将其注册到QML中,使得QML可以访问到这个对象。具体的步骤如下:
创建一个新的C++类,例如MyObject,并继承自QObject。
在MyObject类中声明需要在QML中访问的属性和函数,并使用Q_PROPERTY和Q_INVOKABLE宏进行标记。
在MyObject类中添加需要在QML中访问的信号,并使用Q_SIGNAL宏进行标记。
在MyObject类中添加相应的槽函数,并在函数实现中处理信号的逻辑。
在Qt的主程序中,使用qmlRegisterType函数将MyObject类注册到QML引擎中。

如何实现可以被QML访问的C++类
C++类要想被QML访问,首先必须满足两个条件:一是派生自QObject类或QObject类的子类,二是使用Q_OBJECT宏。QObject类是所有Qt对象的基类,作为Qt对象模型的核心,提供了信号与槽机制等很多重要特性。Q_OBJECT宏必须在private区(C++默认为private)声明,用来声明信号与槽,使用Qt元对象系统提供的内容,位置一般在语句块首行。下面例子在QtCreator3.1.2中创建,Projects选择QtQuickApplication,工程名为Gemini,Component选择QtQuick2.2,然后在自动生成的文件中添砖加瓦。

QML访问C++
一个C++类要想被QML访问,必须满足两个条件:
1、从QObject类或QObject类的子类派生继承
2、使用Q_OBJECT宏
这和使用信号与槽的前提条件是一样的。QObject类是所有Qt对象的基类,作为Qt对象模型的核心,提供了信号与槽机制等很多重要特性。这两个条件是为了让一个类能够进入 Qt 强大的元对象系统(meta-object system)中,而使用元对象系统,一个类的某些方法或属性才可能通过字符串形式的名字来调用。

我们知道, QML 其实是对 JavaScript 的扩展,融合了 Qt Object 系统,它是一种新的解释型的语言, QML 引擎虽然由 Qt C++ 实现,但 QML 对象的运行环境,说到底和 C++ 对象的上下文环境是不同的,是平行的两个世界。如果你想在 QML 中访问 C++ 对象,那么必然要找到一种途径来在两个运行环境之间建立沟通桥梁。

Qt 提供了两种在 QML 环境中使用 C++ 对象的方式:
(1)在 C++ 中实现一个类,注册到 QML 环境中, QML 环境中使用该类型创建对象。
(2)在 C++ 中构造一个对象,将这个对象设置为 QML 的上下文属性,在 QML 环境中直接使用该属性。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:编程教程 QML Application Javascript Component

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加JingGuanBbs
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-6-14 09:13