据我了解,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。
/tmp/.X11-unix/X0
对于某些嵌入式设备,例如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少得多)。