c++ - 与 Windows 和 OS X 集成相比,GTK 和 Qt 如何与 Linux 集成?

标签 c++ c linux qt gtk

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

最佳答案

一些进一步的说明。

GTK+ 和 Qt 都没有使用 Windows 和 OS X 的本地小部件。它们近似使用本地 API 的外观和感觉,但在内部一切都是自定义的。

GTK+ 和 Qt 负责并定义可供 Linux 上的程序使用的主题。桌面环境通常提供一种方法来全局更改所有应用程序的主题,但如何完成由 GTK+ 和 Qt 定义。例如,GTK+ 3 通常使用 ~/.config/gtk-3.0/settings.ini 来存储此信息 (and there is a programmatic API to this file)。

Qt 通过 QGtkStyle 为 GTK+ 2 主题搭建了桥梁,KDE 开发人员为 GTK+ 2 和 GTK+ 3 维护了他们的 Oxygen 主题版本。(前面的句子将来可能会改变,尤其是现在 GTK+ 2 已经死了。 )

更新 1:Unix 系统只提供了一种方法来保留屏幕的矩形区域以执行您想要的操作,包括绘制(如绘制位图图像)。绘图(如绘图形状)是手工完成的。 GTK+ 使用一个名为 cairo 的库来进行绘图;我相信 Qt 是自己编写的(QPainter?)。 Windows 和 OS X 都提供绘图 API(Windows 有几个;OS X 有 Core Graphics)。 (X11 确实有绘图原语,但我认为它们的表现力不足以用于现代 2D 图形;我不知道……)

这同样适用于字体渲染,尽管现代 Unix 系统倾向于将其字体渲染基于一些普遍接受的基础库(freetype、fontconfig、fribidi、harfbuzz)。 GTK+ 使用 Pango 进行文本排版(实际上是将文本 block 排列成行和段落)和绘图(Pango 与 cairo 集成);我相信 Qt 也使用它自己的(这次我不确定)。

I wrote about what X11 does do some time ago.

关于c++ - 与 Windows 和 OS X 集成相比,GTK 和 Qt 如何与 Linux 集成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33885588/

相关文章:

C++ "cannot add two pointers",将硬编码字符串添加到 CString

c++ - 套接字发送接收函数

linux - ARMv8 - 在 64 位操作系统上运行传统的 32 位应用程序

c++ - 在 C++ 中的可执行文件中嵌入声音

c++ - 结构标记和名称,为什么声明为名称的局部变量会编译?

c++ - 打印 "%p"有什么作用?

java - 了解内核在 udp 套接字上分配的本地地址

c - 小型嵌入式系统的好的脚本语言是什么?

c - 简单的 C 代码在 HPUX 上运行良好,但在 Linux 上会出现段错误。为什么?

.net - 使用 Linux 和 .NET