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

时间:2014-04-23 19:13:21

标签: qt user-interface gtk wxwidgets

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

现在我是其中一个有低级别诅咒的人之一":我对知道如何使用某些效果感到不满意 - 我想知道什么是& #39;即使它没有什么实际价值,也会在幕后进行。

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

  • Linux本身就是"只是"一个内核;它不提供GUI支持(?)。
  • X Window系统是大多数类UNIX系统上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的? (请不要说逻辑门:))。
  4. 要获得奖金,也许是Windows操作系统呢?它是否遵循类似的结构,还是完全按照自己的方式进行?

1 个答案:

答案 0 :(得分:10)

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

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

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

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


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

    GLX

    另请参阅使用X

    完成绘图的概述

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