QT似乎是最好的跨平台GUI工具包。不幸的是,它是在C ++中,并且它与许多有趣的语言(如* nix上的D,Rust,Julia和Mono)的绑定要么不可用,要么不维护。 GTK绑定通常是可用的,但GTK在Windows和(特别是)OS X上看起来很丑陋.wxWidgets绑定也很好,但是不可用或者没有为D,Rust和Julia维护(对于Julia,我可以通过Python获取两个工具包,但这很慢而且很笨拙。)
如何将C ++ GUI绑定到非C ++主程序?
答案 0 :(得分:9)
你在这里有一些选择。
首先,您可以通过C API绑定GUI和主应用程序。 GUI通常通过通过事件循环调用的回调来完成,因此您必须将高级语言中的函数公开为C回调,以便从事件循环中调用它们。然后你需要启动Qt事件循环。根据您使用的语言,有多种方法可以执行此操作。例如,如果使用Rust,则可以创建静态或动态库并将C ++ GUI程序链接到该库。在这种情况下,程序的“入口点”将是C ++部分。如果你使用像Julia这样的东西,你可能想要将C ++部分编译成一个库,它也会暴露一个调用Qt事件循环的函数。因此,在这种情况下,“入口点”将是您的更高级别的部分,仍然需要回调到C ++库。
第二种方法更接近Web UI。您可以将GUI设置为使用其他语言编写的主应用程序的客户端。他们可以通过某些现有协议(如HTTP)交换消息,或者您可以通过低级TCP或UDP连接实现自己的协议,或者可以使用“中级”消息库,如ZeroMQ或{{3 }}。您还可以考虑完全删除Qt,只需编写一个Web应用程序,将您的程序作为Web服务器。这是现在编写GUI的最跨平台的方式,我想:)