你如何制作linux GUI?

Joh*_*n T 23 c c++ linux native

我的主要经验是使用C && C++,所以我更愿意和他们在一起.我不想使用像QT,GTK或wxWidgets或任何工具包那样的东西.我想学习本土编程,这种目的无法实现.考虑到这一点,我也想避免使用Java.

我理解gnome和xfce以及KDE等都是Linux的桌面环境,安装的基础通常是X(Xorg).在为Linux编码时,您是为X编码还是为桌面环境编写代码?对于Linux,是否有一个标准的Linux头文件(如win32有windows.h)?或者是每种桌面环境的不同编码方法?

任何帮助是极大的赞赏.

pax*_*blo 65

X是一个可编程的可怕层,尽管你打算避免使用Java,QT或任何优秀的UI抽象层,但你将通过编码到那个级别来做自己的伤害.我已经完成了(很久以前当Motif在我们使用的平台上处于起步阶段时)如果有一个更简单的方法,我不会这样做了.

你对"本地编程"这个短语的使用让我感到困惑.如果您想学习本机编程,那就是您选择调用的API.使用类似的推理,你不应该用C编码,而是选择汇编程序(或直接机器代码),因为C提供了对硬件的抽象.

如果你想学习X编程,那很好.您最终会对您的界面有更多的控制权,但几乎所有其他人在软件交付方面都会超出您的表现.我自己,我更愿意编写一个更高级别的API,我可以在许多平台上使用它 - 它给了我更快的交付时间和更多的市场潜力.

你不是用原子建造房子,而是用砖砌成.我的建议是使用工具,这就是他们的用途.

  • 如果您不愿意通过六个抽象层,那么Linux开发并不适合您.;) (6认同)
  • @jalf:现在大多数发展,实际上. (3认同)

Cha*_*tin 44

我不想使用像QT,GTK或wxWidgets或任何工具包那样的东西.我想学习本土编程,这种目的无法实现.

不,你没有.回到X11的早期版本,比如R1或R2,我在Xlib中编写了一个完整的"Hello,world"程序.

大约700行C.

你不想去那里.

  • 这个评论让我大笑 (8认同)
  • -1. 在问答网站中发现的典型废话 - 每当有人问“如何做 ABC?”时,有人会回答“你为什么要做 ABC?”。除非您了解如何使用 Xlib 进行编码,否则您将永远无法自己编写 Xlib - 可能用于尚未发明的新操作系统内核。当然,如果您在时间线下专业地交付软件,那么您将使用受良好支持的高级抽象。但是,如果您盲目相信现代程序员,您将永远不会在需要时学习如何构建原语。 (5认同)

Tec*_*ard 13

我猜你可以直接针对Xlib编写C代码,但是你最终会重新创建GTK +或QT提供的X并不是唯一的功能.

  • @Mike:在unix哲学中,每个工作都有一个工具.Xlib处于比您预期的更低的水平,它使您能够显示事物.按钮和东西都在工具包里,所以你必须选择一个...... (4认同)
  • @Mike,当你使用NVidia的驱动程序玩DirectX游戏时,你觉得"黑客"吗?他们是第三方软件. (2认同)

小智 10

Unix(以及扩展,Linux)实际上并没有定义与GUI有关的任何内容.通常使用的X没有定义任何与小部件或样式或任何性质有关的东西 - 它主要关注绘图基元和事件处理.基本上,如果你想用纯X编写,你将定义屏幕上每个元素的形状和行为.如果你疯狂到放弃X,你就会在图形帧缓冲级别上工作......

你最好使用一些工具包 - 如果你正在寻找轻量级,为什么不尝试FLTK


And*_*nan 5

GTK、QT 和 wx 是基于 X 构建的工具包,提供更友好的 API。

如果您不使用现有的工具包,您将需要在非常低的级别上编写内容 - 直接处理鼠标和键盘事件。如果您想要一个按钮或文本框,您必须使用低级 xlib 原语自己编写。

在尝试此操作之前,您可能最好选择您喜欢的桌面环境的工具包并开始使用。


lus*_*oog 5

我觉得有必要在这里反驳一下其他答案的一致。X11确实是低级的。但要“真正”了解发生了什么,您应该熟悉 X11 的工作原理。由于所有工具包都在 X 之上工作,因此无论您喜欢与否,您都在使用它。网上有一个很好的教程,我懒得去搜索。它指导您构建一个简单的 Hello World。为此,您必须学习如何创建窗口、请求事件、映射窗口以及循环处理事件。您甚至可以在亚马逊上订购一些二手书。O'Reilly 第 1 卷和第 2 卷(目前是最便宜的版本,但没有早于 X11R4 的版本)对于参考和了解各个部分如何协同工作的完整故事至关重要。然而,对于学习来说,最好的书是 Eric Johnson 和 Kevin Reichard 编写的《X Window 应用程序编程》。

正如其他人所说,在这段旅程的某个时刻,你会发现你已经受够了。两页代码只是为了选择视觉效果,然后您仍然需要填充颜色图,然后才能绘制自定义位图。然后经过两天的重写和调试,发现一切确实有效;你只是忘了XFlush()

这种斗争很重要,因为一旦找到你喜欢的工具包,你就会更加欣赏这些工具包。