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

【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.dtcms.com/a/90183.html

相关文章:

  • java项目之基于ssm的高校共享单车管理系统(源码+稳定)
  • 数据结构与算法-数据结构-线段树1(单点修改,区间查询):最大数,你能回答这些问题吗
  • XSS漏洞靶场
  • C++对象数组的使用
  • Web前端之UniApp、Taro、ReactNative和Flutter的区别
  • Python Django系列—多数据库
  • 信息集译码算法(ISD)
  • C++11QT复习 (五)
  • Lambda 和 Stream 从 0 到 1,从基础到实战
  • Go 语言当中的反射机制
  • 数据结构--二叉树--其一
  • 搭建k8s集群的可观测体系(log和metric)(已踩完坑)
  • 常用的几种思维方式
  • MySQL:DML
  • Node.js的安装和环境配置
  • ECharts实现数据可视化
  • QTcpSocket多线程连接慢问题
  • Axure RP 9.0教程: 基于动态面板的元件跟随来实现【音量滑块】
  • 面试总结2025
  • Transformers快速入门-学习笔记(二)
  • AQS的重入机制和锁释放逻辑
  • 知网打不开
  • 思考我的未来职业
  • 操作系统高频(一)线程与进程
  • Win11更改锁屏背景图片的3种方法
  • 顺序表和链表
  • 一周学会Flask3 Python Web开发-SQLAlchemy数据迁移migrate
  • 数据结构与算法:数组相关力扣题:27.移除元素、977.有序数组的平方、209.长度最小的子数组、59. 螺旋矩阵 II
  • msyql--基本操作之运维篇
  • Tasklet_等待队列_工作队列