在Qt 全球峰会 2025 (Qt World Summit 2025) 上,Qt Group 宣布了一项新的桥接技术 ,旨在帮助 Qt 与各种编程语言集成。 在这篇博客中,我们也希望能回答我们迄今为止收到的一些问题。
在畅想未来时,让我们回顾促使 Qt 产生这项新桥接技术想法的原因。
Qt 起源于 C++ 生态系统。2010 年 QML 和 Qt Quick 的引入为 Qt 带来了新的可能性,重点是使用现代声明式语言进行 UI 开发。尽管如此,在 Qt Quick 应用程序中访问 QML 引擎之外的应用特定 API 和数据,传统上仍然需要编写 C++。
2018 年,PySide 作为 PySide2 成为 Qt 5 的一部分,随后在 Qt 6 中成为 PySide6。如今,它已成为 Qt for Python 的基础。借助 Qt for Python,您可以使用 Python 编程语言(而非 C++)开发 Qt 应用程序,并使用 Shiboken 生成器为 C++ API 创建新的绑定。您还可以导入用 Qt for Python 编写的 QML 模块。与其他任何绑定一样,PySide 仍需要对其绑定的 Qt 库有扎实的了解 。
2023 年底,我们开始探索如何将 Qt 和 Qt Quick 扩展为 C++ 和 Python 社区之外的领先 UI/UX 框架。我们的目标是让新用户专注于他们现有的代码库和首选的编程语言,最大限度地减少为使用 Qt 而进行重构所需的工作量 。
受到将后端和前端分离的软件架构模式的启发,并借鉴多个内部黑客马拉松 (hackathon) 原型,我们开发了一种新的桥接技术概念。在这种方法中,用各种语言编写的代码充当后端并实现业务逻辑。前端是用 QML 和 Qt Quick UI 框架编写的 UI 代码 。
大约在 2024 年 5 月,也就是一年前,我们得出结论,这个方向可以带来切实而有趣的结果。所选的黑客马拉松原型与此完全吻合,并将有助于更快地启动 。到 2025 年春,经过 3-4 次迭代,我们已经将五种编程语言连接到 Qt Quick 的桥梁建立了可工作基线。
我们决定将这种方法和桥接技术命名为"Qt Bridges"。虽然这不是 Qt 第一次使用 "bridge "一词,但这并不冲突,相反,它证实了这个词适合用来描述 Qt 及其工具中各种有点类似的工作 。
借助新的桥接技术,Qt 不仅要为五种预选语言提供一套初始集成:C#、Kotlin/Java、Python、Rust 和 Swift,而且还开放并记录了一些私有的 QML API,以便未来任何人都能构建额外的语言集成。
有些读者可能会问:既然 Qt for Python 已经通过 PySide 提供了绑定,为什么还要包含 Python?答案是: PySide 提供了从 Python 访问 Qt API 的绑定,但开发人员仍需要使用各种 Qt API 手动将 Python 后端连接到 Qt Quick 前端。新的桥接技术仍然构建在 PySide 的基础上,目标是提供一个更高级、更简单的 API,使 Python 后端与 Qt Quick UI 的集成变得更容易,不再需要编写和理解各种 Qt API 。
当您使用桥接器时,您期望从一端连接到另一端,而不用担心下面的 "胶水层"。同样,Qt Bridges 允许开发人员专注于他们当前的代码,决定哪些数据将“跨桥”(across the bridge) 交换 ,从而在用每种选定语言编写的业务逻辑和用 Qt Quick 实现的 UI 之间设计一个简洁的数据接口。
其他读者可能想知道 Qt Bridges 中的 Rust 集成与CXX-Qt有何不同。事实上,两者几乎是相互独立的。CXX-Qt 能让 Rust 应用程序使用 Qt C++ 代码。相比之下,Qt Bridges 的重点是在前端使用 QML 和 Qt Quick,旨在简化和减少使用 Rust 时所需的桥接代码量 。
在撰写本文时,我们正在进行实施的下一步迭代,并在当前的 Qt 6 基线上创建一个新的代码库。
我们将在未来的博客中分享更多细节。未来发布的 Qt Bridges 技术预览版肯定会像 Qt 的其他部分一样包含自己的文档。在此之前,请登录 https://www.qt.io/qt-bridges 获取更新,并让我们知道哪些语言对您最重要。如果您是 Qt 和 Qt Quick 的新用户,请访问 https://try.qt.io。