
CXX-Qt(完成)
文章平均质量分 61
rust与C++对接
liuyuan77
rust爱好人员
展开
-
【CXX-Qt】5.2 Crate 组织
CXX-Qt 由 crates/ 目录下的多个 crate 组成。本页概述了每个 crate 的目标以及它与其他 crate 的区别。⭐ cxx-qt - 主角👷 cxx-qt-build - 建筑工人💚 cxx-qt-gen - CXX-Qt 的核心📖 cxx-qt-lib - “标准”库📚 cxx-qt-lib-extras - 书架💻 cxx-qt-macro - cxx-qt-gen 的前端🦾 qt-build-utils - 使用 Qt 构建。原创 2025-03-26 04:00:00 · 604 阅读 · 0 评论 -
【CXX-Qt】5.1 CXX-Qt 构建系统
使用 CXX-Qt 进行构建比最初听起来要复杂一些。问题(或者用企业术语来说是“挑战”😉)原创 2025-03-26 00:15:00 · 592 阅读 · 0 评论 -
【CXX-Qt】4.5 Traits
其中一些 trait 在 #[cxx_qt::bridge] 中使用特殊语法,类似于 CXX 中的显式 shim trait 实现。根据 trait 的不同,这要么告诉 CXX-Qt 它应该自动实现该 trait,要么告诉它应该使用现有的 trait 实现进行代码生成。CXX-Qt 使用多个 trait 将其行为和支持的功能清晰地编码到 Rust 的类型系统中。Threading - 标记 trait,指示是否应启用 CXX-Qt 线程支持。Initialize - 在对象构造时执行 Rust 代码。原创 2025-03-25 00:15:00 · 279 阅读 · 0 评论 -
【CXX-Qt】4.4 属性
桥接模块中的大多数项都支持 #[namespace]、#[cxx_name=…] 和 #[rust_name=…] 属性。原创 2025-03-24 01:00:00 · 494 阅读 · 0 评论 -
【CXX-Qt】4.3 共享类型
[qenum] - 支持 Q_ENUM 和 Q_ENUM_NSQt 允许通过一组宏将枚举暴露给 Qt 的元对象系统,从而暴露给 QML:Q_ENUM 用于暴露作为 QObject 成员的枚举。Q_ENUM_NS 用于暴露位于命名空间中的枚举。CXX-Qt 通过 #[qenum] 属性支持这两种宏。原创 2025-03-24 00:15:00 · 775 阅读 · 0 评论 -
【CXX-Qt】4.2 extern “C++Qt“
QObjectsMethodsSignalsextern “C++Qt” 部分是 CXX-Qt 桥接的一部分,用于声明 Qt 类型和签名,使其可用于 Rust,并提供包含相应 Qt 声明的头文件路径。一个桥接模块可以包含零个或多个 extern “C++Qt” 块。这补充了 extern “C++” CXX 部分,但允许在 C++ 类型上声明 Qt 特定的功能。可以通过块级属性自动转换为驼峰命名或蛇形命名。原创 2025-03-23 02:15:00 · 240 阅读 · 0 评论 -
【CXX-Qt】4.1 extern “RustQt“
如果自动生成的函数不适用于你的用例,你可以禁用 CXX-Qt 的自动生成并编写完全自定义的属性。例如,如果你的属性不对应于内部 Rust 结构体中的任何单个字段,则可能需要这样做。你可以使用标志指定自定义 getter、setter 和通知信号,例如:#[qproperty(TYPE, NAME, READ = myGetter, WRITE = mySetter, NOTIFY = myOnChanged)]。📝 注意:标志的键使用全大写字母,如 Qt 版本的 `qproperty`。原创 2025-03-23 00:30:00 · 734 阅读 · 0 评论 -
【CXX-Qt】3 桥接模块参考
然后,这个 Rust 模块将像普通的 CXX 桥接一样工作,同时还支持 CXX-Qt 添加的额外功能。extern “RustQt” - 将 Rust 类型暴露给 Qt,作为 QObject、Q_SIGNAL、Q_PROPERTY 等。#[cxx_qt::bridge] 宏的功能与 #[cxx::bridge] 非常相似。共享类型 - 在 Rust 和 Qt 之间共享枚举,例如 Q_ENUM、Q_ENUM_NS 等。Trait - 与 CXX-Qt QObject 相关的 trait。原创 2025-03-23 00:15:00 · 175 阅读 · 0 评论 -
【CXX-Qt】2.5 继承
某些 Qt API 要求你从抽象基类中重写某些方法,例如 QAbstractItemModel。为了支持直接从 Rust 中创建这样的子类,CXX-Qt 提供了多种辅助工具。某些基类可能需要特殊的构造参数。这可以通过使用自定义构造函数来实现。原创 2025-03-22 09:31:06 · 524 阅读 · 0 评论 -
【CXX-Qt】2.4 嵌套对象
然后,可以通过使用 *mut T 将其作为属性、可调用方法的参数或信号参数使用。如下例所示,将 InnerObject 嵌套到 OuterObject 中。首先,在桥接模块的 extern 块中正常定义一个类型。嵌套对象通过指向其 QObject 表示的指针来引用。Rust Qt 对象可以作为属性或参数相互嵌套。原创 2025-03-22 09:08:48 · 391 阅读 · 0 评论 -
【CXX-Qt】2.3 类型
任何有效的 CXX 类型都应该可以与 CXX-Qt 一起使用。请注意,适用与 CXX 相同的规则,因此类型必须是可平凡传递的。如果它们是不透明类型,则必须使用引用或指针。有关如何包装 Qt 对象的示例,请参阅 cxx-qt-lib 源代码。要在容器中使用自定义类型,请找到容器使用的 trait。例如,对于 QSet,有一个 QSetElement trait;对于 QHash<K, V>,有一个 QHashPair trait。原创 2025-03-22 08:58:47 · 887 阅读 · 0 评论 -
【CXX-Qt】2.2 生成的 QObject
CXX-Qt 的一个关键特性是能够从 Rust 创建你自己的 QObject。这就是 #[qobject] 宏的用途。本篇旨在记录生成的 QObject 的详细信息以及如何从 Rust 与生成的 QObject 进行交互。#[qobject] 宏为 Rust 结构体的类型别名生成一个 QObject。虽然这个 QObject 是一个 C++ 类型,但 CXX-Qt 会自动将其包装为 CXX 不透明类型。原创 2025-03-22 08:47:57 · 547 阅读 · 0 评论 -
【CXX-Qt】2.1.1 为 WebAssembly 构建
CXX-Qt 及其编写的应用程序可以编译为 WebAssembly,但存在一些限制。以下是关于如何为 WASM 目标构建的详细说明。你需要安装 Qt for WebAssembly。下一篇将展示已测试的版本。此外,如果尚未完成,请从此处克隆 emsdk git 仓库。原创 2025-03-20 08:40:53 · 886 阅读 · 0 评论 -
【CXX-Qt】2.1 构建系统
CXX-Qt 可以集成到现有的 CMake 项目中,也可以仅使用 Cargo 进行构建。需要了解的可以阅读上2篇文章:Cargo 集成CMake 集成CXX-Qt 可以与任何 C++ 构建系统一起使用,只要在调用 Cargo 之前设置了 QMAKE、CXX_QT_EXPORT_DIR 和 CXX_QT_EXPORT_CRATE_ 环境变量。请查看我们的 CMake 代码以了解如何使用这些变量。原创 2025-03-20 07:42:51 · 386 阅读 · 0 评论 -
CXX-Qt】2 核心概念
CXX-Qt 使用 CXX 在 C++ 和 Rust 之间安全地进行桥接。CXX-Qt 的主要目的是将 Qt 对 C++ 语言的扩展暴露给 CXX。原创 2025-03-18 22:44:22 · 85 阅读 · 0 评论 -
【CXX-Qt】1.5 使用CMake构建
在本示例中,我们将演示如何使用CMake将CXX-Qt代码集成到C++应用程序中。Cargo将CXX-Qt代码构建为静态库,然后CMake将其链接到C++可执行文件中。我们首先需要修改项目结构,以分离项目的不同部分。将Rust项目移动到rust文件夹中。将qml文件夹移回顶层。原创 2025-03-18 22:40:18 · 831 阅读 · 0 评论 -
【CXX-Qt】1.4 使用Cargo构建
我们将演示使用Rust构建系统构建cxxqt_object.rs以及任何QML文件。Cargo将完成整个构建过程,包括链接Qt,就像典型的Rust应用程序一样。请注意,此示例的文件夹结构与CMake教程不同。在此设置中,我们将坚持使用标准的Cargo文件夹布局,只是在src文件夹旁边添加了一个qml文件夹。完整的示例代码可在CXX-Qt仓库的examples/cargo_without_cmake中找到。如果你不想使用Cargo,而只想使用CMake来构建你的项目,请阅读下一篇文章。原创 2025-03-10 00:15:00 · 1104 阅读 · 0 评论 -
【CXX-Qt】1.3 创建QML GUI
[cxx_qt::bridge] 宏是用于在 Rust 中创建一个模块,该模块能够桥接 Rust 和 Qt(通过 C++)之间的交互。它允许你将 Rust 类型暴露给 Qt 作为 QObject、Q_SIGNAL、Q_PROPERTY 等,同时也能够将 Qt 的特性和类型绑定到 Rust 中,比如 QObject 和 Q_SIGNAL。原创 2025-02-12 06:00:00 · 367 阅读 · 0 评论 -
【CXX-Qt】1.2 第一个CXX-Qt模块
让我们开始编写第一个 CXX-Qt 模块。以下是一个简单的指南,帮助你将 Rust 结构体暴露为 Qt 的 QObject 子类,并在其中定义一些属性和可调用的方法。原创 2025-02-11 22:04:33 · 643 阅读 · 0 评论 -
【CXX-Qt】1.1 Rust中的QObjects
与其他Qt-Rust绑定相比,CXX-Qt的目标不仅仅是将Qt功能暴露给Rust,而是完全将Rust集成到Qt生态系统中。我们将通过一个最小示例,展示如何使用CXX-Qt在Rust中创建自己的QObject,并将其与基于QML的小型GUI集成。原创 2025-02-10 14:52:38 · 491 阅读 · 0 评论 -
【CXX-Qt】1 CXX-Qt入门
[cxx_qt::bridge] 宏是用于在 Rust 中创建一个模块,该模块能够桥接 Rust 和 Qt(通过 C++)之间的交互。它允许你将 Rust 类型暴露给 Qt 作为 QObject、Q_SIGNAL、Q_PROPERTY 等,同时也能够将 Qt 的特性和类型绑定到 Rust 中,比如 QObject 和 Q_SIGNAL。原创 2025-02-10 08:31:00 · 762 阅读 · 0 评论 -
【CXX-Qt】0 介绍
安全机制:CXX-Qt 通过 CXX 实现了一种安全的机制,使得 Rust 和 Qt 可以在保持各自代码风格的同时进行互操作。多线程支持:库提供了在 Qt 和 Rust 之间进行安全多线程操作的能力。常见 Qt 类型:为了辅助 Qt 和 Rust 代码的集成,CXX-Qt 为 Rust 提供了常见的 Qt 类型,这些类型可以在桥接过程中传递,并允许表达常见的 Qt 惯用法。宏和代码生成:开发者使用 CXX-Qt 提供的宏注解来描述一个 QObject。原创 2025-02-09 16:15:48 · 571 阅读 · 0 评论