当前位置: 首页 > article >正文

【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 结构体一样使用。


http://www.kler.cn/a/597072.html

相关文章:

  • 语法基础课1.1 变量、输入输出、表达式和顺序语句
  • Spring6:6 单元测试-JUnit
  • Cursor从小白到专家
  • redis操作
  • 超硬核区块链算法仿真:联盟链PBFT多线程仿真实现 :c语言完全详解版
  • 集成学习之随机森林
  • 全面总结:编程中的上下文(Context)
  • c#获取使用串口信息
  • 新版 React19使用 react-quill
  • 使用C++在Qt框架下调用DeepSeek的API接口实现自己的简易桌面小助手
  • 【transformer理论+实战(三)】必要的 Pytorch 知识
  • qt介绍之qscreen
  • OpenLayers集成天地图服务开发指南
  • uni-app集成保利威直播、点播SDK经验FQ(二)|小程序直播/APP直播开发适用
  • k8s的存储
  • 遇到一个奇怪问题,页面请求不到后端
  • TCP的“四次挥手“与TIME_WAIT状态详解
  • Linux vim mode | raw / cooked
  • 2025:sql注入详细介绍
  • 权限维持—Linux系统Rootkit后门