KDE应用程序如何在Gnome下运行?


19

如果Gnome使用GTK +,而KDE使用Qt,那么KDE应用程序如何在Gnome下运行?

Answers:


30

GTK和Qt都是用于构建图形界面的工具箱。每个UI工具箱都为程序提供了自己的功能来创建小部件(按钮,文本框...),并以图形程序链接到的的形式提供。为GNOME编写的程序将使用GTK(libgdklibgtk),而KDE程序使用Qt(libQtCorelibQtGui),启蒙程序使用EFL,依此类推。

但是,所有这些工具箱都使用相同的X窗口系统和相同的X11协议。为了使事物显示在屏幕上,该工具包连接到正在运行的X服务器(通常是Xorg,以前称为XFree86),发送X11命令(创建窗口,在窗口中绘制内容),并接收X11输入事件(鼠标,键盘,窗口大小调整) ,&c)返回。

(大多数现代工具箱,例如GTK,Qt或EFL,它们自己执行精美的绘图,仅使用X11发送完成的整个窗口的图像,而X服务器仅将其显示在屏幕上。老式的工具箱(例如lXaw或Motif)使用X11绘制线条,矩形或文本之类的图元,然后X服务器进行所有渲染。)

然后,X服务器完成将所有内容放在一起,与图形卡对话等工作。这样,您可以运行使用不同工具箱的各种不同版本的程序,因为最终它们仅使用相同的OS工具。

机制而非政策

多重工具包的情况并非X所独有 –例如,您会发现使用标准的Windows程序,comctl32但也使用WPF,.NET WinForms,Chrome的Aura,Firefox的XUL甚至相同的GTK或Qt。大多数游戏使用自己的样式控件。实际上,在任何允许您在整个窗口上绘制图像的图形系统上,这都是可能的。

但是,X原则之一是“机制,而不是政策”。这意味着X服务器仅为其客户端(图形程序)提供执行各种操作的机制,但只施加必要的规则。换句话说,X比任何其他图形系统都更加重视这一点。

例如,图形系统的组成部分之一是窗口管理 –每个窗口周围的框架(又称装饰)绘图,移动窗口和调整窗口大小等功能。Windows和OS X在系统中内置了一个窗口管理器,但是在X中它作为一个单独的程序运行-X.Org套件带有一个最低版本twm,但几乎所有桌面环境都附带了自己的窗口管理器(GNOME拥有Sawfish,Metacity, gnome-shell; KDE具有KWin)提供与相应桌面环境的集成。

(就像工具包一样,现代的“合成”窗口管理器实际上接管了Xorg的工作,即将所有窗口合成到最终的屏幕图像上,从而允许添加阴影或效果之类的东西。)

在现代桌面环境中,这实际上也造成了问题。使用最常见的示例:热键使用相同的“抓握键盘”功能;弹出菜单;和屏幕保护程序,并且只有一个程序可以一次使用它。这意味着您无法在打开弹出菜单时锁定屏幕,也无法在屏幕锁定时跳过歌曲。这是Wayland被创建为X11替代品的多个原因之一。

边注

从技术上讲,这甚至意味着您可以在另一台计算机上运行X程序,并通过网络与计算机上的X服务器通信。确实,这是早期的主要用例,而“ X 服务器 ” 的名称最初就是在这里出现的。可以在Mac上运行X服务器,并使它显示由Linux,FreeBSD甚至OpenVMS上运行的程序创建的窗口。

但是,如上所述,现代工具包会执行所有绘图客户端(精美的图形和漂亮的字体很难用X11基元来完成),并且仅将最终图像推送到X服务器,这在本地非常快,但是需要一个相当一部分网络带宽。

(其他协议,例如RFB(aka VNC)或Microsoft的“ Remote Desktop”,都是为此目的而设计的,它们具有压缩窗口图像的非常有效的方法。)


1
Qt的事件循环包装了GTK,因此您甚至可以将Qt和GTK代码组合到同一应用程序中(通常,这仅与插件一起提供)。
Alex P

@Alex:您的意思是说Qt的事件循环中的“可以包装”可以将事件传递给GTK,还是您说Qt实际上依赖于GLib进行事件循环?
grawity 2014年

1
Qt也可以使用其自己的纯事件循环实现,但是默认情况下它包装了Glib(至少在Qt4中-我没有研究Qt5的实现方式)。有一个隐藏标志($ QT_NO_GLIB)在运行时对其进行控制。
Alex P

7

答案的一部分是领先的桌面环境(Gnome,KDE,XFCE,也许其他)可以在http://freedesktop.org下协同工作,以使这种互操作成为可能。FDMH发布的规范之一是EWMH,它可以确保窗口管理器之间有一定程度的兼容性(对于现代功能,而不仅仅是基本的窗口管理)。


4

在GNOME下运行时,KDE应用程序仍会调用它们依赖的共享Qt库。同样的情况适用于在任何其他桌面环境下运行任何应用程序的任何应用程序。他们对可以调用和不能调用的内容没有任何限制。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.