我有很多C / C ++经验 - 主要是为Windows / Linux编写控制台应用程序,还有一些C#经验 - 通常用于编写WinForms应用程序等。
我非常感动,我可以轻松地在.net中创建一个窗口,例如像
这样简单的东西Form form = new Form();
form.ShowDialog();
足以在屏幕上显示空白表格。事实上,
new Form().ShowDialog();
只要我们不介意在表单关闭后丢失对表单的引用,在技术上就足够了。
我尝试使用windows.h
在C ++中编写一些基于Windows的GUI内容,但不仅学习曲线看起来有点陡峭,而且语法也非常冗长。创建一个像上面提到的单行.net实现这样的简单窗口,使用windows.h
可以轻松超过24行。
但不仅如此,如果我将应用程序移植到Linux / Max(我几乎不会使用.net,除了单声道等黑客之外),那么我需要重写95 GUI代码的百分比。
我假设这是框架的来源,例如QT等......(我真的不太了解gui框架,我担心)。
您推荐哪些GUI框架?哪个是最强大的,哪个最容易使用? 你如何解决用C / C ++编写GUI的任务?
答案 0 :(得分:6)
越接近金属(可以这么说)你正在编程,就越难获得。 WinForms(由.NET Framework提供)是一个相当优秀的Win32 API抽象,考虑到你已经看到的复杂性,它涉及甚至最简单的任务,比如让一个窗口出现在屏幕上。所有这些仍然在后台发生,当然(注册窗口类,创建窗口等),你不必自己编写代码。
有趣的是你将Mono注销为“hack”,但会考虑像Qt这样的库。我真的不确定你在什么基础上做出区分。在WinForms支持方面,Mono库被广泛认为是优秀的。最大的批评者与微软自己的CLR实现相同,即它不会生成真正的 native 代码,这在大多数情况下与性能无关,而不是人们想象的。除此之外,一些人抱怨Mono应用程序不完全符合平台的UI指南(也就是说,它们的外观和行为与本机应用程序完全不同),但我对使用Qt编写的应用程序抱有类似的抱怨。 / p>
如果你想在C ++中进行GUI工作,似乎每个人都建议使用Qt。正如我上面提到的,它恰好不是我最喜欢的库,因为我是使用您当前运行的平台提供的完全本机控件和小部件的坚持者。我知道Qt最近在这方面有所改善,但我仍然认为这不符合我的标准。如果你比我更灵活(我会警告你,普通的Mac用户不比我更灵活),真正的平台独立性是你最关心的问题,它是可能是你应该选择的那个。许多人赞扬它的设计优雅和便利,虽然我严重怀疑它甚至提供与.NET Framework实现相同的简单性。
如果简单和简洁的代码与问题的开头一样重要,那么我强烈建议坚持使用C#和WinForms。当你开始删除抽象层时,事情变得越来越困难,如果你不需要额外的控制水平,那么你就没有任何理由为自己做更多的工作了。 Mono的Forms实现是跨平台应用程序的完美可行解决方案,假设您的需求相对适中。
除此之外,如果你想用C ++ 正确的方式创建一个真正的跨平台应用程序,我建议你严格地将数据层代码与UI层分开,然后编写UI使用您想要支持的每个平台提供的工具。在Windows中,你的选项是相对开放的:.NET WinForms是一个不错的选择,本机Win32虽然是一个有点痛苦的选项,但是一些其他库如MFC和WxWidgets可以帮助减轻完全本机编程的痛苦(尽管不是几乎和WinForms一样)。在Mac上,唯一真正的选择是Xcode,Interface Builder和Objective-C,目标是Cocoa框架。基于Linux / Unix的系统难以我的强项,但我明白Qt就像你可以得到的本地库一样。这听起来比我想象的更多 - 一个设计良好的库应该可以处理80%的工作,只留下大约20%的实现UI所需要做的事情。除了使用真正的原生控件和小部件之外,我认为这种方法提供的另一大优势是灵活性。请注意Windows上的Microsoft Word与Mac上的相似之处(尽管有一些肤浅的相似之处)。 iTunes在Mac平台上几乎已经成为优秀用户界面设计的典范,但在Windows上却像一个痛苦的拇指一样突出。另一方面,如果你在Mac上推出类似Windows Media Player的东西(是的,它已被微软自己试过,虽然没有太大的成功),Mac用户会认为它是一个完全可憎的东西,可能有点冒犯你甚至尝试过。对于真正跨平台的开发人员来说,这不太好。所有这些,如果您的应用程序不是最简单的实用程序,您可能会发现完全不同的界面是合理的(甚至期望的)您想要支持的平台 无论Qt多么伟大,你都无法用它来获得它。
答案 1 :(得分:2)
Qt,放下手。
它是最完整,最成熟,最快的框架。最重要的是,它是一个严重的多平台,您选择商业友好的开源或付费支持。