Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        4年前关闭。
                                                                                            
                
        
我已经编写了一个C ++软件,可以从命令行使用它,并且显然可以在不同的平台(Linux,Windows和Mac)上进行编译和执行。

该软件特别简单,只在命令终端中显示一个菜单,其中包含一些选项,相应地获取输入文件(.csv),在几秒钟内运行,然后打印回输出文件(也包括.csv)。

现在,我想为其编写一个独立于平台的GUI,而无需更改原始源代码。

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

非常感谢你!

最佳答案

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

另外,您可能让GUI是一个单独的程序(启动命令行程序),并通过命令行程序与某种形式的IPC-通常pipes-通信,您可能仍然需要扩展

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

另一种方法(仍然需要进行体系结构更改)可能是通过使用某些HTTP服务器库(例如libonionWt(或者可能是POCO))使您的软件成为专用的Web服务器。那么GUI将是任何最新的Web浏览器。您可能需要一些Web编码技能(AJAX,Javascript等),并且您将更好地理解continuations与Web浏览之间的关系。 (另请参见thisthat)。

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

顺便说一句,好的问题不是“最佳”语言,而是找到足够好的方法,库和框架。

08-06 00:11