在C++中编写GUI应用程序时使用的最佳库是什么?

Ozz*_*zah 10 c c++ user-interface gui-toolkit

可能重复:
Gui工具包,我应该使用哪个?

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

我非常感到非常满意,我可以在.net中创建一个窗口,例如简单的东西

Form form = new Form();
form.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

足以在屏幕上显示空白表格.事实上,

new Form().ShowDialog();
Run Code Online (Sandbox Code Playgroud)

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

我尝试用C++编写一些基于Windows的GUI东西windows.h,但不仅学习曲线看起来有点陡峭,而且语法也非常冗长.创建一个像上面提到的单行.net实现这样的简单窗口,可以轻松使用多达24行windows.h.

但不仅如此,如果我将应用程序移植到Linux/Max(我几乎不会使用.net,除了单声道等黑客之外),那么我需要重写95%的GUI代码.

我假设这是框架的来源,例如QT等...(我真的不太了解gui框架,我害怕).

您推荐哪些GUI框架?哪个是最强大的,哪个最容易使用?您如何解决在C/C++中编写GUI的任务?

Cod*_*ray 5

你正在编程越接近金属(可以这么说),就会越困难.WinForms(由.NET Framework提供)是一个非常出色的Win32 API抽象,考虑到你已经看到的复杂性,即使是最简单的任务,例如让窗口出现在屏幕上.当然,所有这些仍然在后台发生(注册窗口类,创建窗口等),您不必自己编写代码.

有趣的是,你把Mono注销为"黑客",但会考虑像Qt这样的库.我真的不确定你在什么基础上做出区分.在WinForms支持方面,Mono库被广泛认为是优秀的.最大的批评者与微软自己的CLR实现相同,即它不会产生真正的本机代码,这在大多数情况下与性能无关.除此之外,一些人抱怨Mono应用程序不完全符合平台的UI指南(也就是说,它们的外观和行为与本机应用程序完全不同),但我对使用Qt编写的应用程序有类似的抱怨.

如果你想在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%的工作,只需要在实现UI时只需要做20%左右的工作.除了使用真正的原生控件和小部件之外,我认为这种方法提供的另一大优势是灵活性.请注意Windows上的Microsoft Word与Mac上的相似之处(尽管有一些肤浅的相似之处).iTunes在Mac平台上几乎已经成为优秀用户界面设计的典范,但在Windows上却像一个痛苦的拇指一样突出.另一方面,如果你在Mac上推出类似Windows Media Player的东西(是的,它已被微软自己试过,虽然没有太大的成功),Mac用户会认为它是一个完全可憎的东西,可能有点冒犯你甚至尝试过.对于真正跨平台的开发人员来说,这不太好.所有这些,如果您的应用程序不是最简单的实用程序,您可能会发现在您想要支持的每个平台上,完全不同的界面是合理的(甚至是预期的).
无论Qt多么伟大,你都无法用它来获得它.


Jav*_*ier 3

Qt,放下手。

它是目前最完整、最成熟、最快的框架。最重要的是,它是真正的多平台,您可以选择商业友好的开源或付费支持。

  • 您知道,我每天都使用 Qt,并且出于很多原因喜欢它。然而,这是一个无用的答案。你给出了一堆关于令人敬畏的主观主张,却没有提到其中的陷阱。您也没有提及最近由于诺基亚的业务决策而导致的 Qt 不稳定问题。简而言之,这不是我期望从拥有 17K 代表的 SO 成员那里得到的答案。 (4认同)
  • “最完整的?” “最成熟?” 这些是客观可验证的吗?按照谁的标准、谁的应用?但无论哪种方式,请用您的答案_验证_他们。链接到东西。显示数据。这就是我的观点。否则,这些只是主观的“我的框架比你的更好”的主张,并且 SO 上的噪声数据比持续增长。另外,我想补充一点,使用该框架确实存在一些陷阱,但这并不意味着它是一堆热气腾腾的东西。这完全取决于我们作为 Qt 开发人员愿意做出的权衡。 (2认同)