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

Dem*_*emi 7 c++ mono user-interface qt rust

QT似乎是最好的跨平台GUI工具包.不幸的是,它是在C++中,并且它与许多有趣的语言(如*nix上的D,Rust,Julia和Mono)的绑定要么不可用,要么不维护.GTK绑定通常是可用的,但GTK在Windows和(特别是)OS X上看起来很丑陋.wxWidgets绑定也很好,但是不可用或者没有为D,Rust和Julia维护(对于Julia,我可以通过Python获取两个工具包,但这是缓慢和笨拙的).

如何将C++ GUI绑定到非C++主程序?

Vla*_*eev 9

你有一些选择.

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

第二种方法更接近Web UI.您可以将GUI设置为使用其他语言编写的主应用程序的客户端.它们可以通过某些现有协议(如HTTP)交换消息,或者您可以通过低级TCP或UDP连接实现自己的协议,也可以使用ZeroMQnanomsg等"中级"消息库.您还可以考虑完全删除Qt,只需编写一个Web应用程序,将您的程序作为Web服务器.这是现在编写GUI的最跨平台的方式,我猜:)