C++ 在C+;中编写GUI应用程序时,最好使用什么库+;?

C++ 在C+;中编写GUI应用程序时,最好使用什么库+;?,c++,c,user-interface,gui-toolkit,C++,C,User Interface,Gui Toolkit,可能重复: 我有相当多的C/C++经验——主要是为Windows/Linux编写控制台应用程序,也有相当多的C#经验——通常是编写WinForms应用程序等 我对在.net中轻松创建一个窗口印象深刻,例如像 Form form = new Form(); form.ShowDialog(); 足够在屏幕上显示一张空白表格。其实, new Form().ShowDialog(); 只要我们不介意在表单关闭后丢失对表单的引用,技术上就足够了 我尝试过用C++编写Windows的GUI,使用代码

可能重复:

我有相当多的C/C++经验——主要是为Windows/Linux编写控制台应用程序,也有相当多的C#经验——通常是编写WinForms应用程序等

我对在.net中轻松创建一个窗口印象深刻,例如像

Form form = new Form();
form.ShowDialog();
足够在屏幕上显示一张空白表格。其实,

new Form().ShowDialog();
只要我们不介意在表单关闭后丢失对表单的引用,技术上就足够了

<>我尝试过用C++编写Windows的GUI,使用代码> Windows .H./Cuth>,但不仅学习曲线看起来有点陡峭,而且语法也非常冗长。使用
windows.h
创建一个简单的窗口,如上面提到的单行.net实现,很容易超过20多行

但不仅如此,如果我要将应用程序移植到Linux/Max(除了mono等黑客之外,我几乎无法使用.net实现这一点),那么我需要重写95%的GUI代码

我假设这就是框架的用武之地,例如QT等等。。。(恐怕我对gui框架知之甚少)

您推荐什么GUI框架?哪些功能最强大,哪些最容易使用? 您通常如何处理用C/C++编写GUI的任务?

Qt,简单易懂


它是目前最完整、最成熟、最快的框架。最重要的是,它是一种严重的多功能形式,您可以选择商业友好的开源或付费支持。

编程离金属越近(可以说),难度就越大。WinForms(由.NET Framework提供)是对Win32 API的一种非常出色的抽象,考虑到你已经看到的复杂性,即使是最简单的任务,比如在屏幕上显示一个窗口。所有这些仍然在后台进行,当然(注册窗口类、创建窗口等),您不必自己编写代码

有趣的是,你把单写为“黑客”,但会考虑像QT这样的库。我真的不知道你是根据什么来区别的。Mono库在WinForms支持方面被广泛认为是优秀的。最大的批评者与微软自己的CLR实现相同,即它不产生真正的本机代码,在大多数情况下,本机代码与性能的关系比人们想象的更为无关。除此之外,有些人抱怨Mono应用程序不完全符合平台的UI准则(也就是说,它们的外观和行为与本机应用程序不完全一样),但我对使用Qt编写的应用程序也有类似的抱怨

似乎每个人都建议使用QT,如果你想在C++中做GUI工作。正如我上面提到的,它恰好不是我最喜欢的库,因为我坚持使用您当前运行的平台提供的完全本机控件和小部件。我知道Qt最近在这方面有了一些进步,但我仍然不认为它符合我的标准。如果你比我更灵活(我要警告你,普通Mac用户并不比我灵活),而真正的平台独立性是你最关心的问题,那么它可能是你应该选择的。许多人称赞它的设计优雅和方便,尽管我严重怀疑它是否提供了与.NET Framework实现相同的简单性

如果代码的简单和简洁与问题的开头一样重要,我强烈建议您坚持使用C#和WinForms。当您开始移除抽象层时,事情变得越来越困难,如果您不需要这样做所提供的额外控制级别,那么几乎没有任何理由为自己做更多的工作。假设您的需求相对较少,Mono的表单实现对于跨平台应用程序来说是一个完全可行的解决方案

除了此之外,如果您想以C++的方式创建一个真正的跨平台应用程序,我建议您严格地将数据层代码与UI层分开,然后使用您想支持的每个平台提供的工具编写UI。在Windows中,您的选项是相对开放的:.NET WinForms是一个可靠的选择,本机Win32是一个虽然值得选择但有点痛苦的选项,少数其他库(如MFC和WxWidgets)可以帮助减轻完全本机编程的痛苦(尽管不如WinForms)。在Mac上,唯一的实际选择是Xcode、Interface Builder和Objective-C,目标是Cocoa框架。基于Linux/Unix的系统很难成为我的强项,但我了解到Qt是一个尽可能原生的库。这听起来比我想象的要多——一个设计良好的库应该处理80%的工作,只剩下实现UI所需的20%左右。除了使用真正的本地控件和小部件之外,我认为这种方法提供的另一大优势是灵活性。注意微软Word在Windows上与在Mac上看起来有很大的不同(尽管表面上有一些相似之处)。iTunes在Mac平台上几乎已经成为优秀UI设计的典范,但在Windows上却像一个受伤的拇指一样突出。另一方面,如果你在Mac上推出类似Windows Media Player的东西(是的,微软自己也尝试过,但没有多大成功),Mac用户会认为这是一个完全令人憎恶的东西,并且可能会对你的尝试感到有些不快。对于真正有跨平台意识的开发人员来说,情况并非如此。也就是说,如果你的应用程序不是最简单的实用程序,你可能会发现