qt kde gtk gnome xlib x11之间的关系

Linux本身没有图形界面,Linux现在的图形界面系统只是Linux下的应用程序。

一,基本概念

QT:1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。

KDE:K桌面环境(K Desktop Environment)的缩写。一种著名的运行于 Linux、Unix 以及FreeBSD 等操作系统上的自由图形桌面环境,整个系统采用的都是 TrollTech 公司所开发的Qt程序库(现在属于Digia公司)。

GTK:是一种图形用户界面(GUI)工具包。也就是说,它是一个库(或者,实际上是若干个密切相关的库的集合),它支持创建基于 GUI 的应用程序。可以把 GTK+ 想像成一个工具包,从这个工具包中可以找到用来创建 GUI 的许多已经准备好的构造块。

GNOME:是一套纯粹自由的计算机软件,运行在操作系统上,提供图形桌面环境。是Linux操作系统上最常用的图形桌面环境之一。在GTK基础上实现的窗口管理器叫GNOME。

X11:也叫做X Window系统,X是协议,不是具体的某个软件,就像HTTP协议、IP协议一样。用于X Server和X Client通信协议。 Xlib将X11具体为一个个的功能函数。 Qt、Gtk+等为了更方便的利用Xlib,对其进行再封装,形成了多组件应用程序开发框架(widget toolkits)。

XLIB:Xlib是一个用c语言编写的X Window System协议的客户端库,它包含有与x服务器进行通信的函数,编程者可以在不了解x底层协议的情况下直接使用它进行编程。


二,X协议的Client端由谁实现的

  XFree86是X协议的Server端软件,但Client端更多的是方便程序员使用X协议与服务器端的XFree86交互,故就产生了一个Xlib库,封装了X协议内容。如果你还觉得直接使用Xlib不方便,于是就产生了QT和GTK,对Xlib进一步封装,提供了很多控件,可以可视化的使用X协议更方便程序员的开发。


三,Xlib、QT和GTK的直接关系如下图:

在这里插入图片描述
在x86的linux下,QT是直接使用Xlib库的,GTK并为直接使用Xlib,而是使用函数库GDK和Glib。这种结构使得GTK可以更方便地移植到其它系统上,或使用与XWindows系统无关的图形库。


四,GTK、GDK、GLib与GNOME的关系:

  • 什么是GDK?
     GDK是标准Xlib函数调用的一个基本封装(wrapper),如果你对Xlib很熟悉,就不需要来重新熟悉绝大多数的GDK函数.所有的函数都是为了提供一个方便直观的风格来访问Xlib函数库.另外,自从GDK使用GLib,在多平台上使用时,GDK变得更加的方便和安全。

  • 什么是GLib?
     GLib库提供了一系列函数(functions)和定义(definitions),在设计GDK和GTK程序时很有用.它提供了一些标准c函数库(standard libc)的替代函数,比如malloc,但在其他的系统上使用时有很多问题。

  • 一个Gnome程序使用多个库组成的层次结构:
      Gnome库在最高层,包括帮助例程,类和特殊的widget,并为应用程序提供一个基础架构。
       第二层是GTK,它是GTK+库的一部分。这个库提供了基本的工具包和widget来创建GUI应用程序。大多数GUI是直接用GTK编写的。GTK同时为Gnome库提供了一个功能强大的对象系统。
       再下一层是GDK,它简单的对X函数库进行了包装,只有在我们进行特殊绘画或设置窗口的特殊属性的时候才会用到它。
       最下面一层是Glib,它是C的一个实用程序库,包括可移植性和一些实用程序功能,以及一些容器类,例如:链表,可变数组,变长字符串,HASH(貌似是哈西表),缓存,一个事件循环和其他有用的结构。


五,gtk、gdk、glib与GNOME的关系:

   KDE和GNOME是窗口管理器,启动他们后我们进入了可视化操作(图形界面),既然需要显示图形,自然少不了与X协议的服务器软件打交道,既然QT和GTK进一步封装了X协议,并且他们提供了更为丰富的窗口及控制机制,于是在QT基础上实现的窗口管理器叫KDE,在GTK基础上实现的窗口管理器叫GNOME。还有,KDE和GNOME并不只是窗口管理器,同时提供了桌面、菜单等等。


六,QT与OPENGL的关系:

 opengl和dx是显卡的接口,最底层的绘图api,属于GDI。
 qt是跨平台gui库,用于绘制窗口或者对话框之类视图。
 opengl关心的是渲染等,而qt关心的是按钮被点击后引发什么动作之类的。

  • Qt/Embedded与QT区别
     Qt/Embedded在原始Qt的基础上,做了许多出色的调整以适合嵌入式环境。同 Qt/X11相比,Qt/Embedded很节省内存,因为它不需要Xserver或是Xlib库,它在底层摒弃了Xlib,采用framebuffer 作为底层图形接口。Qt/Embedded的应用程序可以直接写内核帧缓冲,因此它在嵌入式linux系统上的应用非常广泛。

在这里插入图片描述

  • Qt版本
    (1)Qt有商业版和免费版(GPL和LGPL)。Qt是跨平台的,所以为四个OS平台开发了不同的产品:
    (2)面向Linux的就叫Qt/X11,这个实际上是使用Xlib库;
    (3)面向嵌入式Linux就叫Qt/Embedded,这个采用直接同Linux I/O或Framebuffer打交道;
    (4)再就是面向Mac OS X和面向Windows的产品(?可能就直接叫做Qt)。
    (5)基于Qt有最成功的产品 — KDE。
    (6)基于Gtk+有最成功的产品 — GNOME。
    (7)二者基本成为Linux 桌面版本的标准组成部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值