【CXX-Qt】1.1 Rust中的QObjects

对于一个典型的Qt应用程序,我们用到如下工具:

  1. QML: 一种声明式、灵活、动态类型的解释型语言,专门用于定义反应式且美观的GUI布局和部件,具有快速的迭代速度。
  2. C++ :Qt的传统后端 ,特点是生态系统丰富,但开发速度慢且易错。
    显然,rust语言替代C++的后端位置,是一个不错的选择。
    然而,C++和QML在Qt应用程序中仍然占有一席之地。因此,Rust、C++和QML应该能够相互补充。CXX-Qt旨在通过使用Qt的元对象系统和CXX,使这三种语言能够轻松地集成在一起。

由于CXX-Qt主要是CXX的扩展,你应该首先熟悉CXX

CXX已经提供了Rust与C++之间的惯用交互。CXX-Qt在此基础上构建,允许你在Rust中定义Qt特定的概念。

这些概念包括:

自定义QObject类
    属性
    可调用/槽
    信号
    继承和重写
枚举(QEnum)
命名空间(QNamespace)

与CXX一样,要使用这些功能,你需要用一个属性宏(#[cxx_qt::bridge])标记一个Rust模块。在这个桥接模块中,你可以描述C++/Qt代码到Rust,或者Rust代码到C++/Qt的接口。

接口是两个独立的部分:

  1. C++文件,定义QObjects、枚举等,并将它们暴露给Qt的元对象系统。
  2. Rust代码,提供所描述结构的Rust实现,以及你声明的任何C++/Qt构造的接口。

CXX-Qt模块生成概述

将Rust结构体作为QObjects

与CXX类似,CXX-Qt允许你将Rust结构体作为一种新类型暴露给C++。然而,CXX-Qt扩展了这一功能,允许你创建一个由Rust结构体支持的QObject子类。与普通的不透明CXX类相比,QObject子类和Rust结构体之间的映射不是1:1的!

QObject子类在Rust和C++中都是它自己的类型。当这样的QObject被实例化时,它总是会构造一个Rust结构体的实例。然后,QObject可以引用底层的Rust结构体进行属性访问。这个QObject子类的任何行为也将在Rust中定义,例如使用#[qinvokable]属性。Rust实现还可以访问底层的Rust结构体以修改任何Rust数据。与大多数CXX类型相比,外部的QObject类和内部的Rust结构体将保持两种不同的类型!

下一篇文章,我们将编写第一个CXX-Qt模块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liuyuan77

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值