【CXX-Qt】2.2 生成的 QObject

CXX-Qt 的一个关键特性是能够从 Rust 创建你自己的 QObject。这就是 #[qobject] 宏的用途。本篇旨在记录生成的 QObject 的详细信息以及如何从 Rust 与生成的 QObject 进行交互。

#[qobject] 宏为 Rust 结构体的类型别名生成一个 QObject。虽然这个 QObject 是一个 C++ 类型,但 CXX-Qt 会自动将其包装为 CXX 不透明类型。

复制代码
如果桥接模块命名为 qobject,则可以通过 qobject::T 访问 C++ 类型。

结构解析

任何由 CXX-Qt 生成的 QObject 都只是一个 C++ QObject 子类,它拥有一个 Rust 结构体的实例。

默认情况下,Rust 结构体的实例是使用 Default trait 构造的。如果 Rust 结构体无法实现 Default,则需要使用 Constructor trait 提供自定义构造函数。

C++ 对象会将任何状态委托给 Rust 结构体,因此它只是一个薄包装。

复制代码
📝 注意:QObject 内部的 Rust 结构体由该 QObject 拥有。因此,当 C++ 对象被销毁时,内部的 Rust 结构体也会被丢弃。

有关实现属性、可调用方法和信号的详细信息,请参阅 extern "RustQt"。

有关引用另一个 QObject 的信息,请参阅嵌套对象。

C++ 上下文

在 C++ 上下文中实现方法时(例如,对于可调用方法),这些方法需要在桥接模块中定义的类型上实现。

例如,如果桥接模块名为 qobject,类型名为 T,则实现块应写为 impl qobject::T { ... }。

复制代码
来自 trait 的方法(例如 Threading)在 C++ 上下文中可用。

在 C++ 上下文中,可以通过使用 CxxQtType trait 上的方法访问 Rust 上下文。

Rust 上下文

Rust 结构体的唯一要求是它必须具有 Default 实现,或者 QObject 实现了 cxx_qt::Constructor。

除此之外,Rust 结构体可以像任何普通的 Rust 结构体一样使用。

相关推荐
笑口常开xpr4 分钟前
【c++】面 向 对 象 与 抽 象 数 据 类 型
开发语言·c++·抽象数据类型
tt55555555555532 分钟前
嵌入式开发面试八股文详解教程
linux·c++·驱动开发·面试
Flower#34 分钟前
【算法】树上启发式合并 (CCPC2020长春 F. Strange Memory)
c++·算法
奔跑吧邓邓子1 小时前
【C++实战(75)】筑牢安全防线,攻克漏洞难题
c++·安全·实战·漏洞
胖咕噜的稞达鸭2 小时前
二叉树进阶面试题:最小栈 栈的压入·弹出序列 二叉树层序遍历
开发语言·c++
wzg20162 小时前
pyqt5 简易入门教程
开发语言·数据库·qt
橘颂TA2 小时前
【剑斩OFFER】算法的暴力美学——将 x 减到零的最小操作数
c++·算法·leetcode·动态规划
拾光Ծ2 小时前
【数据结构】二叉搜索树 C++ 简单实现:增删查改全攻略
数据结构·c++·算法
小贾要学习2 小时前
编程中常见的排序算法
数据结构·c++·算法·排序算法
Yupureki2 小时前
从零开始的C++学习生活 4:类和对象(下)
c语言·数据结构·c++·学习