用于Windows的良好C ++ GUI库

我正在为C ++寻找一个好的Windows GUI库。 我认为理想的特点是:

  • 现代 。 MFC,wxWidgets,Qt很久以前就开始了,他们没有使用现代的C ++特性和标准库。
  • 有一个丰富的控制与体面的function。 几乎在任何地方放置HTML的能力都是我喜欢wxWidgets的快乐,当我不讨厌它的时候。
  • 开源 。 这是必须的。 如果购买之后有来源可用,那么它被认为是好的。
  • 有一个表单devise器在某种程度上 。 是的,这将是伟大的。 经过多年与delphi的合作,每次我必须手工指定控制尺寸时,我都会哭泣。
  • 免费用于商业用途 。 但是,如果一些图书馆真的很好,那么我会考虑购买它。
  • 跨平台 。 这个规范只是一个决胜盘☺。 我可以没有这个生活。

请提出你的想法为候选人。 每个答案请一个图书馆。

我认为你写Qt太快了, 它并没有太多的使用标准的库,但是这与已经过时的不同,而不是有着不同的优先级。 QT容器使用迭代器,模板algorithm等,但是具有不同的迭代器模型; Qt迭代器指向元素而不是它们之间。 这使得前向和反向遍历是对称的,并且在遍历期间清除了用于插入和移除元素的边缘情况,尽pipe效率稍低。 他们也提供STL风格的迭代器。 这是一个GUI库IMO的有效select; 集装箱的性能不太可能是关键因素。

至于预处理器(moc),可以把它看作是一个知道如何读取C ++头文件而不需要自己的语言的IDL编译器。 它不会预处理直接编译的代码。 它只是生成一个额外的cpp文件,其中包含信号/槽callback的封送处理,当它们跨越线程边界并且需要同步时可以变得相当混乱。

Qt是免费的,如果你可以释放你的源代码(即使是商业用途,有多less内部工具真的需要专有),并不是不合理的价格,如果你不能(没有单位版税或任何特别恼人的)

如果您正在寻找一个现代的 C ++ GUI库,那么Adobe Source Library(ASL)中的Adam & Eve是正确的(它主要依赖于Boost库 )。

我真的很喜欢它,是布局的devise完全脱离了代码。 布局定义可以在外部文件中,以便用户可以在不重新编译程序的情况下更改布局。

来自该网站的示例:

layout clipping_path { view dialog(name: "Clipping Path") { column(child_horizontal: align_fill) { popup(name: "Path:", bind: @path, items: [ { name: "None", value: empty }, { name: "Path 1", value: 1 }, { name: "Path 2", value: 2 } ]); edit_number(name: "Flatness:", digits: 9, bind: @flatness); } button(name: "OK", default: true, bind: @result); } } 

这将产生:

clippingpath

除此之外,ASL还有其他一些有用的工具类。

编辑:但它( 还 )没有一个表单devise师。

WTL是由ATL团队的Nenad Stefanovic创build的现代GUI框架。 它重量轻,但仍支持操作系统的所有现代function。

Windows模板库

Windows模板库(WTL)是用于开发Windows应用程序和UI组件的C ++库。 它扩展了ATL(活动模板库),并为控件,对话框,框架窗口,GDI对象等提供了一组类。

非官方的文件存在于代码项目中 。

你应该看看gtkmm 。 它是用现代c ++编写的,使用stl,遵循其惯例,包括对utf-8的支持。 更重要的是,它是开源的,跨平台的,并在lgpl下获得许可。 从他们的网站:

特征:

  • 使用inheritance来派生自定义小部件。
  • types安全的信号处理程序,在标准的C ++中。
  • 多态性。
  • 标准C ++库的使用,包括string,容器和迭代器。
  • UTF8全面国际化
  • 完整的C ++内存pipe理
    • 对象组成
    • 自动重新分配dynamic分配的小部件。
  • 充分利用C ++命名空间。
  • 没有macros。
  • 跨平台:Linux(gcc),FreeBSD(gcc),NetBSD(gcc),Solaris(gcc,Forte),Win32(gcc,MSVC ++ .Net 2003),MacOS X(gcc),其他
  • 免费软件,免费开源和专有开发。
  • 讨论,devise和公开实施。

wxWidgets – 免费的,允许许多devise者使用商业应用程序( http://wxdsgn.sourceforge.net/,http://www.dialogblocks.com/,http://wxformbuilder.org/,http::// wxglade。 sourceforge.net/ …)。

我个人从零开始写了很多我的小部件,但这总是不可行的。

看看eGUI ++,它有一个很好的现代对象模型。 你可以看到一个MDN文章带来简单的Windows窗体到原生应用程序 ,你可以下载代码从约翰Torjo的网站

我强烈推荐JUCE ,这是很好的干净的现代C ++,这是非常好的logging与DOXY评论。 它有很多gui类,扩展现有类很简单。 该库不仅涵盖了gui,还有很多代码用于声音处理和生成,线程,读写现代图像格式,基本networking等。 它看起来不错(默认情况下有OS X的感觉),是跨平台的。

不利的一面:尽pipe非商业用途是免费的(商业用途),但商业用途需要相当昂贵的商业许可证。

总而言之,绝对值得一看,我已经用它来做好几个爱好项目,其中一个我打算在某个时候发布。 它实际上使gui编码在c + +乐趣,这就是说一些东西!

有一次,我对Ultimate ++有一些兴趣。 Nice许可证(BSD)是一个IDE,支持各种编译器,用于许多现实世界复杂的应用程序(非常重要!)等等。
我从来没有时间在那里投资,但我仍然认为这是一个有趣的select。

Nana C ++ Library瞄准易于使用的便携式图书馆,它提供了一个GUI框架和线程,使用现代C ++方法(如特征,元编程和其他模板技术)轻松进行编程。

这个项目的博客: http : //sourceforge.net/p/nanapro/blog

http://sourceforge.net/projects/nanapro下载最新版本;

我将再次看看Qt–这对于商业用途来说并不是免费的,但是如果你刚刚起步的话,他们有一个很好的入门级许可证。 我认为他们的界面是相当现代的,虽然我不喜欢他们似乎依赖于他们预处理的语言扩展。

你在“现代”类别中寻找什么?

wx和QT都可以使用标准库。 他们包含自己的集合类(就像MFC一样),而不是几年前编译器对STL的支持是不完整的。 像写时复制string的一些补充不在STL中。

他们都可以使用模板来实现一些由macros(wx)或预编译器(QT)完成的调度机制,但除了可读性较差的代码之外,它们不会获得任何东西。

我想知道为什么这个之前没有提到过:我会推荐CEGUI ,它是跨平台的(包括Windows),支持OpenGL和DirectX,可以让你无缝集成到任何游戏或渲染/可视化应用程序中。 它也似乎完全满足您的所有要求。

  • 现代 (使用STLXML作为其资产文件,并在内部支持C99标准以实现最大的兼容性,在1.0 Release之后,它将在开发分支中使用C ++ 11)。 它还支持unicode字符和各种语言(可以在示例中看到)。

  • 提供以下小部件开箱即用:文本字段(可滚动),编辑框,多行编辑框,旋钮,checkbox,button,单选button,选项卡式窗口,进度条,可滚动窗格,滑块,下拉菜单(combobox) ,菜单栏,布局容器(垂直/水平)等等

  • 根据开放源代码MIT许可证发布 ,其中一个许可证为您提供了最大的自由度,您只需将许可证文件与应用程序一起分发即可

  • 可以使用Python编写的所见即所得编辑器轻松创build和编辑布局。 它被称为CEED,也是免费的。 它经过了大量的testing,适合用于生产。 一个稳定的版本已经发布,新的function正在开发中。 一个图像集编辑器也可以在同一个应用程序。

  • 如上所述,这是免费的商业用途 。 您唯一的义务是分发许可证文件。

  • CEGUI适合跨平台使用。 它正式支持Windows,Linux,Mac OS 。 它也被用在iOS和Android上。 开发分支支持Android。

它最初devise为游戏的GUI库,但它也非常适合用于科学应用程序,渲染应用程序,可视化。 桌面应用程序也可以完成。 默认资源中提供了一个类似Windows的皮肤。

它已经存在了十多年,拥有一个活跃的社区,是一个强大,function丰富和可扩展的图书馆。

你看过Fox工具箱吗?

我必须和Qt一起戴上帽子。 我们是Qt的商业许可证持有者,虽然价格昂贵,但是每一块钱都是值得的。 Qt代码库非常稳固。 GUIdevise师是那种更好的工具之一。 前一段时间,我们评估了一组可用于Windows的GUI工具包,Qt在各方面都提前发布,所以我看到了其他一些工具包。

如果你想子弹这里是我的…

  • 面向对象的,Qt有一个非常好的OO体系结构,在整个类层次结构中非常一致

  • 信号和插槽为您提供了一种很好的方式来处理开发用户界面时总是出现的callback问题

  • 虽然有点过于复杂,但是却可以让你转向展示数据的MVC架构,这并不是一件坏事

  • 除了大量的UI类之外,还有几乎所有其他的类都支持数据库操作,线程,networking和其他任务。

是的Qt内部使用非STL容器和非STLstring。 但是不要让它成为你取消QT资格的标准。 QT容器都有类似迭代器的STL,而String类有很多特性。 最后但并非最不重要的是,它具有良好的多平台支持。

我投票WTL。 轻量级和本地。 从我的angular度来看,你无法打败这两个标准。 我用stl c ++编写我的模型层,并使用每个操作系统的本地库。 这可以保证您的应用程序看起来不像屁股,并允许您在每个操作系统上使用最广泛的function。

对于一个WTL GUIdevise者,我推荐这个优秀的,但由于某种原因WTLBuilder完全不为人知的:www.wtlbuilder.com。

我最近也开始寻找一个GUI,并开始尝试每一个。 至于我可以说:

  • Qt不仅是一个GUI库,也是一个框架(包括ECMAScript,SQL,XML支持等等)。
  • Qt是一个坚实的select,可以通过在大约半个小时内的黑客来理解。
  • 不幸的是,Qt迫使你使用他们的编程模型,但你可以很容易地避免它,并写你的风格的代码。
  • Qt由诺基亚拥有,如果你是一个在select图书馆时考虑到政治问题的人,诺基亚最近与微软达成了在手机上使用Windows Phone 7的协议。
  • GTK +是我个人的select,但它不是每个平台上的原生。 尽pipe它与本地Windows控件的速度相同,但速度有时会更快。
  • wxWidgets端口在每个平台上都是原生的,这是我在GTK +之后的第二个个人参考,因为它不是以利润为导向的。

Smartwin ++怎么样?

他们的wiki似乎现在正在下降。 示例Hello World! 来自Smartwin ++文档的代码

既然你命名为Delphi:你知道Borland C ++ Builder也是像Delphi那样的VCL吗? 您可以免费发布,并获得源代码。

winx怎么样?

迟到比从未好, 但你可能会觉得这很有趣 。 您满足的唯一要求是“开放源代码”和“免费”。 它确实做了你没有要求的事情

  • 将您的源代码减less一个数量级

  • 让你完全控制布局,数据绑定,控件的variables数组等等。

当你看到它是如何工作的,你可以轻松地添加自己的控件。

顺便说一句 – 它还有一个缺点 – 这是令人上瘾的。

我build议使用Qt,因为:

  • 它是跨平台的,涵盖了广泛的操作系统(包括移动)
  • 它是开源的,并且有更快的速度变得更好
  • 它有一个不错的GUIdevise师和一个非常有能力的IDE(Qt Creator)
  • APIdevise非常好,易于使用
  • 它有一个很好的文档,很容易阅读
  • 它有Qt翻译系统,使您可以拥有一个多语言的应用程序
  • 小部件根据布局来调整自己的GUI布局系统使得一切都变得简单
  • QML为您提供强大的graphics和animation创build奇妙的graphics用户界面的能力
  • 它对networking和连接(套接字,SSL,www,IPC,…)有很好的支持。
  • 它有用于testing代码的QTestLib
  • 如果你不想使用C ++,它有许多语言的绑定