Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将QtGUI连接到非C++;主程序?_C++_Qt_User Interface_Mono_Rust - Fatal编程技术网

C++ 如何将QtGUI连接到非C++;主程序?

C++ 如何将QtGUI连接到非C++;主程序?,c++,qt,user-interface,mono,rust,C++,Qt,User Interface,Mono,Rust,QT似乎是最好的跨平台GUI工具包。不幸的是,它是在C++中,并且它对许多有趣的语言(如D、RISE、朱丽亚和莫诺河上的NIX)的绑定要么不可用要么不维护。GTK绑定通常是可用的,但GTK在Windows和(特别是)OS X上看起来很难看。wxWidgets绑定也不错,但对于D、Rust和Julia不可用或未维护(对于Julia,我可以对这两个工具包使用Python,但这既慢又笨拙) 我如何将我的C++ GUI绑定到一个非C++主程序? 这里有很多选项。 首先,您可以通过C API绑定GUI和主

QT似乎是最好的跨平台GUI工具包。不幸的是,它是在C++中,并且它对许多有趣的语言(如D、RISE、朱丽亚和莫诺河上的NIX)的绑定要么不可用要么不维护。GTK绑定通常是可用的,但GTK在Windows和(特别是)OS X上看起来很难看。wxWidgets绑定也不错,但对于D、Rust和Julia不可用或未维护(对于Julia,我可以对这两个工具包使用Python,但这既慢又笨拙)


<>我如何将我的C++ GUI绑定到一个非C++主程序?

这里有很多选项。 首先,您可以通过C API绑定GUI和主应用程序。GUI通常是通过回调完成的,回调是通过事件循环调用的,因此您必须将高级语言中的函数公开为C回调,以便从事件循环调用它们。然后您需要启动Qt事件循环。根据您使用的语言不同,有多种方法可以实现这一点。例如,如果使用生锈,可以制作静态或动态库,并将C++ GUI程序链接到它。在这种情况下,程序的“入口点”将是C++部分。如果使用像朱丽亚这样的东西,你可能会想编译C++部分作为一个库,它也会公开一个调用Qt事件循环的函数。因此,在这种情况下,“入口点”将是您更高级的部分,它仍然需要调用C++库。
第二种方法更接近web UI。您可以使GUI成为用其他语言编写的主应用程序的客户端。它们可以通过一些现有协议(如HTTP)交换消息,或者您可以通过低级TCP或UDP连接实现自己的协议,或者您可以使用“中级”消息传递库(如或)。您还可以考虑完全放弃QT,只需编写一个Web应用程序,将您的程序作为Web服务器。我想这是现在编写GUI最跨平台的方式:)

将Qt例程包装为C函数;大多数语言实现都接受C外部函数。第二种方法是最好的,如果我想把UI作为一个模块化的组件,它可能在以后被改写(比如对于本地的外观和感觉)?@ Demetri,我相信是的,因为它比直接的C绑定更解耦。因此,在所有这些选项中,速度差异是什么?(在从GUI到后端传递数据方面,后端处理将结果传递回GUI进行渲染):1、GUI和后端用相同的语言(如Qt和C++)2。GUI和后端以不同的语言(如C++ QT/朱丽亚)3.Web应用程序,其中GUI在浏览器中呈现,程序作为服务器配置这些选项的好方法是什么?@Asy您的问题太复杂,无法在注释中回答,更新答案将是不正确的,因为它与原始问题无关。因此,您应该创建一个单独的问题。