c++ - 如何将 QT GUI 加入非 C++ 主程序?

标签 c++ qt user-interface mono rust

QT 似乎是最好的跨平台 GUI 工具包。不幸的是,它是在 C++ 中,它与许多有趣的语言(例如 *nix 上的 D、Rust、Julia 和 Mono)的绑定(bind)要么不可用,要么没有维护。 GTK 绑定(bind)通常可用,但 GTK 在 Windows 和(尤其是)OS X 上看起来很难看。wxWidgets 绑定(bind)也不错,但对于 D、Rust 和 Julia(对于 Julia,我可以通过 Python两个工具包,但那是缓慢而笨拙的)。

如何将我的 C++ GUI 绑定(bind)到非 C++ 主程序?

最佳答案

这里有几个选项。

首先,您可以通过 C API 绑定(bind)您的 GUI 和主应用程序。 GUI 通常是通过事件循环调用的回调完成的,因此您必须将高级语言中的函数公开为 C 回调,以便从事件循环中调用它们。然后你需要启动 Qt 事件循环。根据您使用的语言,有多种方法可以做到这一点。例如,如果您使用 Rust,您可以制作一个静态或动态库并将您的 C++ GUI 程序链接到它。在这种情况下,您程序的“入口点”将是 C++ 部分。如果您使用像 Julia 这样的东西,您可能希望将 C++ 部分编译为一个库,该库还会公开一个调用 Qt 事件循环的函数。所以在这种情况下,“入口点”将是您的更高级别的部分,它仍然需要回调到 C++ 库中。

第二种方法更接近网络用户界面。您可以使您的 GUI 成为用另一种语言编写的主应用程序的客户端。它们可以通过某些现有协议(protocol)(如 HTTP)交换消息,或者您可以通过低级 TCP 或 UDP 连接实现您自己的协议(protocol),或者您可以使用“中级”消息传递库,如 ZeroMQnanomsg .您也可以考虑完全放弃 Qt,只编写一个 Web 应用程序,将您的程序作为 Web 服务器。我猜这是现在编写 GUI 最跨平台的方式,我想 :)

关于c++ - 如何将 QT GUI 加入非 C++ 主程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26162590/

相关文章:

qt - QML FlickArea 中心内容

c++ - 使用 C++ 在我的应用程序的菜单栏中创建一个 "Save Current Setting"功能

java - Android 触摸事件 - 具有向上向下和移动事件

wpf - 更改缩放顺序 WPF

c++ - 对许多函数调用进行错误检查

c++ - 链接器无法找到 __assert_fail

c++ - 模板特化适用于 int 而失败于 double 作为一个类

c++ - linux AFS 段错误

c++ - 布局中有多个 QGLWidget

qt - Qt Commercial 有没有 LGPL 版本没有的模块