将GUI添加到C ++软件的最佳语言

时间:2015-06-19 10:26:14

标签: c++ user-interface

我编写了一个可以在命令行中使用的C ++软件,显然可以在不同的平台(Linux,Windows和Mac)中编译和执行。

这个软件特别简单,它只是在命令终端显示一个菜单,有几个选项,相应地输入文件(.csv),几秒钟后运行,并打印输出文件(也.csv)

现在我想为它编写一个独立于平台的GUI而不改变我原来的源代码。

哪种语言最好? C ++? Java的?有没有人对此有经验或建议?

非常感谢!

4 个答案:

答案 0 :(得分:5)

您将始终必须更改某些C ++源代码,特别是因为GUI工具包都是事件驱动的,因此基于某些event-loop(通常由工具包库提供) )。

或者,您可能将GUI作为一个单独的程序(启动命令行事务),使用命令行程序与某种形式的IPC -often pipes进行通信,您可能仍需要扩展

我建议使用Qt5,这是一个用于C ++的跨平台(Linux,Windows,MacOSX,Android,....)图形用户界面框架库。如果可能,请使用最新版本的Qt和C++11中的代码(因为closures变得非常有用)。

另一种方法(仍需要进行体系结构更改)可能是通过使用某些HTTP服务器库(如libonionWt(或许POCO)使您的软件成为专用的Web服务器});然后GUI将是任何最近的Web浏览器。您可能需要一些网络编码技能(AJAX,Javascript,...),您将更好地理解continuations和网页浏览之间的关系。 (另请参阅this& that)。

如果您的软件运行得足够快(例如少于几分之一秒),您可以使其核心处理成为GUI程序的callback函数(或Qt slot)。但是你不应该运行一个超过十分之几秒的函数(否则,用户界面将没有足够的响应),至少不在主GUI线程中。否则,将计算拆分为多个部分或切片(例如,GUI工具包中的“空闲处理”,CPS& coroutines是相关概念),以确保事件循环频繁(至少每秒5或10次)重新启动,或采用multi-threaded方法(在GUI主线程之外使用计算线程),这会带来痛苦的synchronization问题(例如,您将使用mutexes })。

BTW,好的问题不是“最好的”语言,而是要找到一个足够好的方法,库和框架。

答案 1 :(得分:3)

如果您了解C ++,请尝试QT, 或者寻找不同的跨平台GUI解决方案。

答案 2 :(得分:3)

您可以公开一些类似RPC的服务,并让前端查询您的C ++后端。这样您就可以用另一种语言编写UI代码,甚至可以在Web界面上公开它。

答案 3 :(得分:2)

如果您熟悉C ++,那么使用WxWidgets将是不错的选择。