X-Windows,wxWidgets,GTK/Qt和OpenGL有什么区别?

MGA*_*MGA 12 gtk user-interface qt wxwidgets

我已经做了几年的控制台编程,现在是时候了解一下GUI的迷人世界.我在wxWidgets中涉猎过一点点; 编写了一个Hello World程序,稍微玩了一下,等等.

现在我是那些有"低级诅咒"的人之一:我不知道如何使用有效的东西 - 我想知道引擎盖下发生了什么,即使它很少或者没有实际价值.

所以我一直在阅读这个主题(例如这里),但我发现很难绕过所有不同的系统,工具包和他们做的事情.到目前为止,我已经发现了(如果我错了,请纠正我):

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

现在提出一些问题:坚持使用类UNIX系统:

  1. 谁是最底层的?,即哪个组件呈现最终显示在屏幕上的位图?
  2. 这是通过OpenGL完成的吗?如果是这样,谁调用OpenGL?如何在没有显卡的旧PC上完成?
  3. 如果你真的很顽固,你能走多远?您可以在GUI中编写最原始的API是什么?X11?OpenGL的?(请不要说逻辑门:)).

对于奖金,也许是Windows操作系统呢?它是否遵循类似的结构,还是完全按照自己的方式进行?

dra*_*hnr 11

  1. X服务器,解释自己将需要超过10k字.不适合SO答案.阅读代码,让你的眼睛爆炸.裸露X适用于软件渲染.OpenGL 可以在该上下文中以两种不同的方式使用(参见下图).

  2. 不.这取决于X. X只是另一个可以实现其绘图原语的库,正如开发人员所希望的那样.但是X本身是一个非常复杂的野兽,它的扩展数量非常荒谬,这使得今天的X功能就像它一样(没有OpenGL支持,就像一个例子,没有xrandr).

  3. 这取决于你愿意承受多少痛苦.你肯定可以在你的屏幕上绘制X基元或OpenGL基元,但它不再是80年代了.

Gtk +/Qt是OS特定API(X/Wayland/W*)的抽象,以减轻创建GUI的痛苦并减少要编写的代码量.这些抽象本身具有很高的复杂性,并且有数千行代码(只需查看Gtk +提供的GtkTreeView Klass).因此,您现在只需定义按钮和布局以及窗口小部件的包装,而不是绘制像素.


因此,从这篇wiki文章中,您可以获得对X proto 的GLX扩展的基本概述:

GLX

另请参阅使用X完成绘图的概述

请注意,如果Wayland和/或Mir会快速启动,这将在未来几年内被淘汰.那些是完全不同的故事.