你最喜欢用哪个库来创建GUI界面(如gtk,qt,win32 api等)?

24

您认为在Windows中创建GUI的最佳方式是什么?使用GTK还是Win32 API?

您是否推荐在Windows中使用GTK?是?否?为什么?


你有无数的选择。你为什么只限制自己使用GTK和Win32呢? - EboMike
没有理由。Windows 还有其他的 GUI 库吗?告诉我更多吧 :) - xRobot
您可能不希望选择GTK+作为跨平台解决方案。 - RoestVrijStaal
考虑使用Xamarin的MonoDevelop http://monodevelop.com/ - Ben
10个回答

31
如果你只为Windows制作GUI界面,我强烈建议使用WIN 32 Api。我使用过GTK+、pyGtk、FLTK制作了许多应用程序,并学习了Qt、MFC和SmartWin++。相信我,但我最喜欢的是Win32 Api。虽然它的学习曲线陡峭,但对于创建本地的Windows应用程序来说,它是最快和最好的。并且随着程序变得越来越复杂,与其他工具包相比,Win32 Api会更容易使用。而且在Win32 Api中,有些事情是其他工具包所不能做到的。
测试结果如下:
起始时间(简单的带菜单和按钮的GUI): GTK+=7秒钟; Qt= 4秒; WxWidgets=3.32秒; FLTK=1秒钟; Win32 API=0.34秒。
占用空间: Gtk+=132 kb; Qt= 4.5 mb; WxWidgets=4.5 mb; FLTK=54 kb; Win32 API=6.5 kb。

这些文件大小是包含调试符号还是不包含? - user877329
3
除了性能之外,你能解释一下为什么这个工具包更好吗? 特别是为什么程序越复杂,与其他工具包相比就越容易呢? - MasterMastic
@MasterMastic 因为Win32是Windows内核API的包装器(这些API是专有的,因为Windows是专有的),所以你无法比Win32更低级。其他GUI工具包只是本地Win32的包装器或绘制自己的控件,但即使是自定义绘制的GUI工具包也需要一些方法来创建一个窗口进行绘制。这就是Win32的作用。 - HackerDaGreat57

20

让我们来看一下。

  • Win32非常低级、基于C语言,使用起来很棘手。
  • MFC被认为已过时。
  • C#(或C++)与.NET可能是你在Windows特定开发中的首选。
    • 甚至有半受限的方式将该代码移植到其他平台上(Mono)。
  • Java非常适合编写非常独立于平台的代码。对不起,你说了C++。
  • QT相对来说是跨平台的。
  • 当然还有GTK+,尽管我个人没有太多的经验。

就个人而言,如果我要做一些Windows特定的事情,我会使用.NET——Visual Studio中的工具非常强大,这是一个很好的全面套件。

对于非特定平台的东西,我使用Java,但那可能不是你的选择。我经常见到QT用于这个目的。


5
Windows上的GTK应用程序外观丑陋,字体难看。 - duckduckgo
1
Deluge看起来非常不错,它使用GTK对吧? - nmr
2
wxWidgets怎么样? - hl3mukkel
@hl3mukkel wxWidgets 实际上是 Win32 的一个包装器。看一下源代码就知道了。 - HackerDaGreat57

16

在GUI工具包/框架方面,您有很多选择:Qt、wxWidgets、GTK+/gtkmm、WinAPI、MFC、.NET WinForms/WPF... 这些只是比较流行的。

由于您限制自己使用C++,我会排除.NET,因为在.NET上的C++旨在作为未管理和托管世界之间的连接。这并不意味着您不能将其用于其他类型的开发,但考虑到其笨拙的语法和无数陷阱,我不会选它。此外,VS的WinForms代码生成器将表单的代码放入头文件中..

就像其他人所说的,WinAPI是用C编写的,非常快且功能强大,但很低级且编程/学习不容易。MFC是一种选择,因为它是用C++编写的,比WinAPI更易于使用,也非常强大。然而,它几乎过时了(主要是由于有.NET的存在)。

我不建议在Windows上使用GTK+/gtkmm(GTK+的C++封装),因为您无法获得本机Windows外观,它在开发人员机器上设置非常麻烦,还带着许多依赖项,需要在用户机器上安装。这实际上很遗憾,因为尤其是gtkmm具有非常漂亮的类层次结构和设计。可能是最好设计的GUI库之一 :)

话虽如此,我会推荐Qt或wxWidgets。两者都是用(相当现代的)C++编写的,正在积极开发,拥有良好的库设计,可多平台运行并提供许多功能。无论如何,请尝试使用这里列出的几个库,并查看哪一个可以让您最轻松地完成想要做的事情 :)


8

Win32 API太复杂,MFC太烦人了。我在Windows上使用过MFC、Win32 API和Qt。在我看来,Qt是最好的选择。对于GTK我还没有尝试过,所以很抱歉不了解它。

2019年修改:看起来这些选项都已经过时了,那么跨平台的解决方案如何呢?比如React Native WindowsElectron


8

两者都是针对C语言的,但gtk有一个很好的包装器(gtkmm)。

gtk有自己的外观,因此用户无法在界面元素上进行皮肤设计(使用Windows样式)。但我更喜欢用它来编程。

win32、MFC和.net主要限于使用MS Visual Studio,而gtk在VS中非常难以使用。

你应该去看看win32、.net、gtkmm和qt。只需尝试使用它们编写和编译简单的hello world程序即可。

win32的优点:

  • 本地Windows代码
  • 快速

缺点:

  • 没有类,只有带有句柄的C语言(非常糟糕)
  • 我认为文档记录得非常不好

gtk(mm)的优点:

  • 易于学习/编程
  • 文档记录良好

缺点:

  • 某种程度上安装开发文件比较困难
  • 没有本地的Windows外观

2
gtk(mm) 的另一个缺点是它有很多依赖项(如 glib、gdk、pango 等),并且您总是需要将大量的 DLL 文件拖到用户机器上 :/ - Christian
1
@Christian 我想你的意思是,Windows 的缺点在于它完全无法处理依赖关系。 - alternative
1
@Simon,你可以将它们下载为PDF文件,但我更希望他们提供HTML束。 - BroVic
@BroVic 我部分使用WinApi,如果你能给我指出一个可以获取参考文档pdf的地方,那就太棒了。 - Xantium
@Simon 请访问API参考文档https://learn.microsoft.com/en-us/windows/win32/api/。从这里,您可以访问任何感兴趣的文档。使用左侧导航栏底部的按钮下载PDF文件。 - BroVic
显示剩余3条评论

6
如果您关心Linux(或Mac)兼容性,那么选择Qt。否则选择Win32。

1
我真的不知道为什么这不是最受欢迎的答案。+1 - HackerDaGreat57

5

我过去曾经使用过GTK+开发一个多平台应用程序。我发现它相对来说很容易学习和使用。在我看来,GTK+的主要优点是你可以将你的应用程序移植到其他窗口系统上。而主要缺点则是它不会与其他Windows应用程序完全一样。如果你正在进行跨平台工作或者已经非常熟悉GTK+(并且没有时间去学习新的工具包),我会推荐使用它。


5

个人而言,我更喜欢Qt,但这取决于您想要制作什么样的用户界面。

反对Win32:

  • 低级别、实现琐碎事情的复杂性高。你需要做 EVERYTHING

  • 如果你选择这条路,我会推荐像Petzold的书。

支持Qt:

  • 漂亮的GUIs

  • 可以通过创建样式表轻松更改外观和感觉

  • 信号和插槽机制通知您UI事件,例如"按钮单击"等。

  • 不错的布局系统

  • 与Visual Studio IDE集成

  • 现代面向对象的C++代码,易于理解和使用

  • Qt助手(非常好的文档)

  • 相对自由的许可证(LGPL)

  • Qt Designer - WYSIWYG设计工具,可用于表单设计

  • 带有丰富的其他c++功能,包括XML、网络、事件循环、线程、数据库访问等

反对Qt:

  • 中间步骤使用MOC编译器

支持WPF:

  • 如果您想要新的Windows平台的WPF功能,那么WPF是最好的选择。

1
Qt的一些优点在使用Visual Studio时也适用于Win32。与VS的集成 - 检查。表单设计器 - 检查。自由许可证 - 当然。捕获按钮点击的机制 - 检查。 - Seva Alekseyev
绝对喜欢Qt。这是人类迄今为止创建的最好的GUI库。 - Anti Earth
@SevaAlekseyev 没有在 Visual Studio 中检查过 win32,但真的吗?Visual Studio 中有一个用于 win32 的表单设计器? - puerile
当然。在过去,表单被称为对话框。现在的服务水平有些低于人们的期望值(例如,没有可视化事件绑定,没有自动变量/控件关联)。 - Seva Alekseyev

2

2

如果您希望进行平台无关的开发,我建议使用Qt而不是当前的GTK。与Qt以及Win32相比,GTK2的绘图速度非常慢。如果您喜欢本机外观和感觉,则wxWidgets适合您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接