可能重复:
Gui toolkits, which should I use?
我有相当多的C/C++经验--主要是为Windows/Linux编写控制台应用程序,以及相当多的C#经验--通常用于编写WinForms应用程序等等。
我对在.net中轻松地创建一个窗口印象非常深刻,例如,一些简单的东西
Form form = new Form();
form.ShowDialog();就足以在屏幕上显示一个空白的表格。事实上,
new Form().ShowDialog();在技术上是足够的,只要我们不介意在表单关闭后失去对它的引用。
我尝试过用C++编写一些基于windows的图形用户界面内容,但是不仅学习曲线看起来有点陡峭,而且语法也非常冗长。创建像上面提到的单行.net实现这样的简单窗口,使用windows.h可以轻松地超过24行。
但不仅如此,如果我要将应用程序移植到Linux/Max (除了mono等黑客之外,我几乎不能使用.net ),那么我需要重写95%的GUI代码。
我假设这就是框架出现的地方,例如QT等等.(恐怕我对gui框架不太了解)。
您推荐什么样的GUI框架?哪个最强大,哪个最容易使用?您通常如何处理用C/C++编写GUI的任务?
发布于 2011-02-21 03:18:53
Qt,放下手。
它是可用的最完整、最成熟、最快的框架。而且,最重要的是,它是非常多的和你选择的商业友好的开源或付费支持。
发布于 2011-02-21 03:25:54
离编程越近(可以说是这样),事情就越困难。 WinForms (由.NET框架提供)是对Win32 API的一个非常出色的抽象,考虑到您已经看到它涉及到最简单的任务,比如在屏幕上显示一个窗口。所有这些仍然发生在后台,当然(注册窗口类、创建窗口等等),您只需要自己编写代码。
有趣的是,您将Mono写为“黑客”,但会考虑像Qt这样的库。我真的不知道你是根据什么来区分的。当涉及到WinForms支持时,Mono库被广泛认为是优秀的。最大的批评者与微软自己的CLR实现是一样的,即它不会产生真正的本机代码,在大多数情况下,这与性能比人们想象的更加无关。除此之外,一些人抱怨Mono应用程序不完全符合平台的UI准则(也就是说,它们的外观和行为不完全像本机应用程序那样),但我对使用Qt编写的应用程序也有类似的抱怨。
如果您想在C++中做GUI工作,那么似乎每个人都建议使用Qt。正如我前面提到的,它碰巧不是我最喜欢的库,因为我对使用您当前运行的平台提供的完全本机控件和小部件很有粘性。我知道Qt最近在这方面有了一些进步,但我仍然认为它不符合我的标准。如果您比我更灵活(我将警告您,普通Mac用户并不比我更灵活),而真正的平台独立性是您非常关心的问题,您可能应该选择它。许多人称赞它的设计优雅和方便,尽管我严重怀疑它是否提供了与.NET框架的实现相同的简单性。
如果代码的简单性和简洁性与问题的开头同样重要,那么我强烈建议坚持使用C#和WinForms。当您开始删除抽象层时,事情变得更加困难,如果您不需要这样做所提供的额外的控制级别,那么几乎没有理由为自己做更多的工作。假设您的需求相对较小,Mono的表单实现对于跨平台应用程序来说是一个完全可行的解决方案。
除此之外,如果您想以正确的方式在C++中创建一个真正的跨平台应用程序,我建议您严格地将数据层代码与UI层分开,然后使用每个要支持的平台提供的工具编写UI。在Windows中,您的选项是相对开放的:.NET WinForms是一个可靠的选择,原生Win32是一个有点痛苦但值得选择的选项,而且像MFC和WxWidgets这样的少数其他库可以帮助减轻完全原生编程的痛苦(尽管不如WinForms那样好)。在Mac上,唯一真正的选择是Xcode、Interface和Objective,目标是Cocoa框架。基于Linux/Unix的系统几乎不是我的强项,但我不得不明白,Qt是您所能得到的本地库。这听起来比我想的要多--一个设计良好的库应该处理80%的工作,在实现UI时只留下大约20%的工作要做。除了使用真正的本地控件和小部件之外,我认为这种方法提供的另一个巨大优势是灵活性。注意,微软Word在Windows上的外观与Mac上的非常不同(尽管有一些表面上的相似之处)。iTunes已经成为Mac平台上优秀用户界面设计的典范,但在Windows上却表现得非常突出。另一方面,如果你在Mac上推出了类似的产品(是的,微软自己也尝试过了,尽管没有成功),Mac用户会认为它是一个完全令人厌恶的东西,甚至可能会对你的尝试有些冒犯。对于真正的跨平台开发人员来说不是那么好。所有这些都可以说,如果您的应用程序不是最简单的实用程序,您可能会发现,在您想要支持的每个平台上,一个完全不同的界面是合理的(甚至是预期的)。
不管Qt有多棒,你都不可能得到它。
https://stackoverflow.com/questions/5061877
复制相似问题