我编写了一个可以在命令行中使用的C ++软件,显然可以在不同的平台(Linux,Windows和Mac)中编译和执行。
这个软件特别简单,它只是在命令终端显示一个菜单,有几个选项,相应地输入文件(.csv),几秒钟后运行,并打印输出文件(也.csv)
现在我想为它编写一个独立于平台的GUI而不改变我原来的源代码。
哪种语言最好? C ++? Java的?有没有人对此有经验或建议?
非常感谢!
答案 0 :(得分:5)
您将始终必须更改某些C ++源代码,特别是因为GUI工具包都是事件驱动的,因此基于某些event-loop(通常由工具包库提供) )。
或者,您可能将GUI作为一个单独的程序(启动命令行事务),使用命令行程序与某种形式的IPC -often pipes进行通信,您可能仍需要扩展
我建议使用Qt5,这是一个用于C ++的跨平台(Linux,Windows,MacOSX,Android,....)图形用户界面框架库。如果可能,请使用最新版本的Qt和C++11中的代码(因为closures变得非常有用)。
另一种方法(仍需要进行体系结构更改)可能是通过使用某些HTTP服务器库(如libonion或Wt(或许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将是不错的选择。