X窗口系统、wxWidgets、GTK/Qt和OpenGL有什么区别?

21

我已经做了几年控制台编程,现在是时候学习一下迷人的GUI世界了。我稍微尝试了一下wxWidgets;编译了一个Hello World程序,稍微玩了一下等。

现在我是那些“低层次魔咒”的人之一:我不满足于知道如何有效地使用某个东西 - 我想知道发生了什么,即使它没有或很少实际价值。

因此我一直在阅读这个主题(例如这里),但我发现很难理解所有不同的系统、工具包以及它们的作用。到目前为止,我已经弄清楚了(如果我错了,请纠正我):

  • Linux本身只是一个内核;它不提供GUI支持(?)。
  • X Window系统是大多数类UNIX系统上GUI的基础。
  • GTK是一个GUI工具包,Qt包含一个GUI工具包。GTK和Qt处于相同的“级别”(?)。
  • Gnome是基于GTK构建的桌面环境,KDE是基于Qt构建的。
  • wxWidgets是一个库,它围绕着(?)低级工具包,如GTK,从而提供跨平台的好处。
  • OpenGL是一个用于渲染2D和3D矢量图形的API。

现在有一些问题:坚持类UNIX系统:

  1. 谁在一切的底部?即最终显示在屏幕上的位图由哪个组件渲染?
  2. 这是通过OpenGL完成的吗?如果是,谁调用OpenGL?在没有显卡的旧PC上如何完成?
  3. 如果您想要真正固执,可以走多低?能够编写GUI的最原始的API是什么?X11?OpenGL?(请不要说逻辑门:))。

对于奖金,也许Windows操作系统怎么样呢?它是否遵循类似的结构,还是完全走自己的路?


2
这种类型的问题更适合在http://programmers.stackexchange.com/上提问。 - RobbieE
亲爱的 @mga:我谦虚地建议您将问题标题改为“X-Windows、wxWidgets、GTK/Qt和OpenGL之间有什么区别?”这样,其他人就可以找到并使用这个问题了。 - Martin Ba
我同意RobbieE的观点。此外,这个问题太过宽泛。 - László Papp
1个回答

17
  1. X服务器,仅解释它本身就需要超过10k个字。不适合作为SO答案。阅读代码会让你的眼睛爆炸。裸露的X适用于软件渲染。OpenGL可以在这种情况下以两种不同的方式使用(见下图)。

  2. 不是的。这取决于X。X只是另一个库,它可以根据其开发人员的愿望实现其绘图原语。但是X本身是一个非常复杂的怪物,具有其荒谬的扩展数量,这使得今天的X能够像它现在这样运行(例如,没有OpenGL支持,就像没有xrandr一样)。

  3. 这取决于你愿意承受多少痛苦。你肯定可以在屏幕上绘制X原语或OpenGL原语,但现在已经不是80年代了。

Gtk+/Qt是操作系统特定API(X/Wayland/W*)的抽象,以减轻创建GUI的痛苦并减少要编写的代码量。这些抽象本身非常复杂,涵盖数千行代码(只需查看GtkTreeView Klass,该类由Gtk+提供)。因此,您现在可以定义按钮、布局和小部件的包装,而不是绘制像素。


从这篇维基百科文章中,您可以获得有关X协议的GLX扩展的基本概述:

GLX

请参阅有关使用X进行绘图的概述。

请注意,希望在未来几年内此内容将过时,如果wayland和/或Mir开始启动。这些是完全不同的故事。


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