#qt #ui

rute

基于 Qt 实现的 UI 库

6 个版本

使用旧的 Rust 2015

0.0.6 2018年12月27日
0.0.5 2018年11月25日
0.0.3 2018年10月14日
0.0.1 2018年9月29日

#45 in #qt

MIT/Apache

4.5MB
86K SLoC

Rust 67K SLoC // 0.0% comments C++ 19K SLoC // 0.1% comments

Build Status Build status

Rute

Rute 是一个基于 Qt 的 Rust UI 库。已经有了几个这样的项目,如 rust-qtqmlrs,那么 Rute 与它们有什么不同呢?

概览

Rute 在 API 生成方面采取了与其他不同的方法。

  • 不是解析 C++ 头文件或手动完成所有操作,而是使用了一个 API 描述文件。
  • 作为中间步骤生成 C API,但也可以从纯 C 代码中使用。
  • 所有需要用于 C 绑定的 C++ 生成代码(可选)生成到一个共享对象(dll/dylib/so),Rust/C API 可以使用这个对象。
    • 只暴露一个包含函数指针的符号。这使得它非常适合在应用程序使用的共享对象之间传递这个结构。
    • 这也允许主机应用程序使用插件(共享对象)并仅传递一个指向整个 UI 接口的指针。

详细信息

有关如何工作的详细信息,请参阅 此处(WIP 和有些过时)

状态

Rute 目前处于早期开发阶段,除了一些 基本示例外,实际上不可用。

优点

  • 不需要用户构建所有绑定,而一些其他生成器则要求这样做。
  • 跨平台。无需为每个平台生成特定的绑定。
  • 可以保持所有 C++ 生成代码在单个共享对象中。Rust 或 C 程序无需与任何 C++ 代码链接。
  • 这种分离允许主机程序以非常低廉的成本(单个指针)加载 dll 并传递接口。
  • 分离还允许插件(共享对象)使用此功能而不直接与 Qt 链接,从而使它们对 Qt 版本无感知。
  • 槽和信号以及虚拟重写可以直接从 Rust/C 使用,并且可以直接设置在对象上。
  • 无需代码生成即可绑定到槽/信号,就像 Qt C++ 中的那样。
  • 提供了比常规 C++ API 更安全的 API。

缺点

  • 信号和槽不能像在 C++ 中那样轻松定义,并且只存在于 API 中定义的。
  • 目前处于非常 WIP 状态。存在(已知)内存泄漏,需要修复。
  • 添加的层会影响性能。实际影响有多大需要测试。

源代码许可

许可方式为以下之一:

任选其一。

文档许可

Qt 文档采用 GNU 自由文档许可协议版本 1.3 许可,因此 Rute 的文档也采用相同的许可。

Qt 许可证

请记住,如果您计划发布使用 Rute 的应用程序,您将还需要使用 Qt 许可证,相关信息请参阅这里

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义,您有意提交给作品包含在内的任何贡献,将以上述方式双许可,不附加任何额外条款或条件。

依赖关系