当前位置: 首页 > 面试题库 >

与GTK和Qt与Windows和OS X的集成方式相比,它们如何与Linux集成?

陈龙野
2023-03-14
问题内容

据我了解,Windows和OS X方面的Qt和GTK只是本地GUI库的包装,就像OS X围绕Cocoa的包装和Windows
Win32的包装一样。但是,我的问题是,它们如何与Linux集成?桌面环境开发人员是否必须为Qt或GTK实现特殊的库,或者它如何工作?我环顾四周,但找不到真正的答案。


问题答案:

在Linux(台式机和笔记本电脑)上,X11服务器通常会显示图形屏幕(至少在2015年初是这种情况)。您的GUI应用程序通过套接字与该服务器通信,通常是在Unix套接字(例如)上本地进行的/tmp/.X11-unix/X0。X11服务器通常是Xorg。

对于某些嵌入式设备,例如Android手机或某些小工具(汽车,汽车或医疗设备行业中的GPS),则有所不同(DirectFB,帧缓冲设备 -台式机上的X11服务器使用的…)

一些发行版正在切换到Wayland(或者也许是Mir)。由于我不太了解,因此无法解释细节。在AFAIU中,仍然涉及一些服务器(例如Xorg,它是与图形卡通信的唯一的用户级软件组件)和一些协议,并且主要的工具包(例如Qt和GTK)也已适应它们(因此,如果您为Qt或GTK,您无需关心这些细节,但应该升级工具包。

图形工具箱(Qt,Gtk)通过某些特定协议(例如,用于X11的X Window
System协议
)与X11服务器(或Wayland)进行交互。由于历史原因,这些协议非常复杂,实际上需要遵循某些约定,例如EWMH。

X11今天不像上个世纪那样被使用。特别是X11的
服务器端绘制功能(例如Xlib的XDrawLine或XDrawText)在今天很少使用,因为该工具包正在绘制像素图图像客户端并将其发送到服务器。

注意,您可能不考虑为应用程序提供GUI界面,而是提供Web界面(例如,使用libonion,Wt,....之类的库);然后您的应用程序将变成专用的Web服务器,并且用户将通过浏览器(在其台式机/笔记本电脑/平板电脑/电话中)与您的应用程序进行交互。

实际上,用户界面是如此复杂,以至于您确实应该为其使用一些工具包(如果使用C
++进行编码,则为Qt)。从头开始编码(甚至在Xlib或XCB之上,对于X11)也需要花费大量的时间。

X11之上还存在其他一些小部件工具包,例如FOX工具包,FLTK(但其中大多数功能比Qt或GTK少得多)。



 类似资料:
  • [编辑]我检查了emf compare模块,结果发现emf compare只提供了“compare with”菜单中的“compare with ether”选项。正在比较两个文件。所以剩下的问题是如何使选项“compare with”>“Latest from Repository”与emf compare editor一起工作

  • 我的样本代码在这里 尝试运行junit测试时,收到以下错误消息。 JAVAlang.IllegalStateException:未能加载ApplicationContext 原因:org。springframework。豆。工厂BeanCreationException:创建名为“nameDao”的bean时出错:调用init方法失败;嵌套的异常是java。lang.IllegalArgument

  • sonar.projectkey=projkey sonar.projectname=projname Sonar.ProjectVersion=1.0 sonar.sources={path} sonar.java.binaries={path} Sonar.ProjectBaseDir={path}

  • 我们在Azure中实现Web应用程序和主机。然后我们希望使用Microsoft Azure ACS支持的SSO功能。查看我们网站的条件是用户只需在整个登录IdP过程中提供电子邮件地址。当我们实施和配置Web应用程序时,我们会按照网站上的所有说明进行操作,如下所示http://blog.2mas.xyz/configuring-windows-azure-active-directory-acces

  • 我只是在学习Ruby和Rails,并且在Windows上使用RubyMine作为我的IDE。GitHub刚刚发布了面向Windows的GitHub。我安装了它,它看起来像一个不错的界面。但是,它似乎并没有安装像Git.exe这样的东西,供RubyMine使用。所以RubyMine抱怨找不到git,而git(以GitHub for Windows的形式)却坐在那里无忧无虑地无视RubyMine。 当

  • Integration with third party libraries or vanilla javascript code can be achieved via the config attribute of virtual elements. It's recommended that you encapsulate integration code in a component or