你如何制作linux GUI?

时间:2008-12-12 01:37:09

标签: c++ c linux native

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

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

非常感谢任何帮助。

11 个答案:

答案 0 :(得分:65)

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

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

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

你不是用原子建造房子,而是用砖建造房屋。我的建议是使用工具,这就是他们的目的。

答案 1 :(得分:44)

我不想使用QT,GTK或wxWidgets或任何工具包之类的东西。我想学习原生程序设计,这种目的无法实现。

不,不。回到X11的早期版本,比如R1或R2,我在Xlib中编写了一个完整的“Hello,world”程序。

大约700行C。

你不想去那里。

答案 2 :(得分:13)

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

答案 3 :(得分:10)

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

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

答案 4 :(得分:4)

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

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

在尝试此操作之前,您最好选择首选桌面环境的工具包并从中开始。

答案 5 :(得分:4)

在这种情况下根本就没有“本地”这样的东西。 Windows和OS X只有一个官方选项,而X则没有。

答案 6 :(得分:3)

Linux&的“原生”界面大多数其他类Unix操作系统是Xlib,X11的最低级别C API。

GTK,Qt&其他都(据我所知)以Xlib为核心实现。正如其他人所说的那样,Xlib为您提供最大程度的控制权,但您必须为此工作(而其他人可能会在提供产品方面绕过您的圈子。)

作为参考,我个人实现了一个相当功能丰富的& C ++中的现代(即可流动)跨平台(Win32 + X11)GUI库。总计数约为29克朗的C ++,其中X11和X的每个约需要2500行。 Win32垫片。其余的是针对平台中立的Widget实现。除非你准备做出这样的承诺,否则我强烈建议你选择一个更高级别的库(Qt可能是我的选择,尽管我不能忍受预处理器方法)。

顺便说一下,Xlib的一大优点是它的原始可移植性 - 任何带有屏幕的Unix机器都可以使用它,它可以在Windows和Linux上运行。 OS X也是如此。

答案 7 :(得分:2)

我认为有必要在这里反驳其他答案的一致性。 X11确实是低水平。但要“真正”了解正在发生的事情,您应该对X11的工作原理有所了解。由于所有工具包都在X之上工作,无论您喜欢与否,都可以使用它。网上有一个很好的教程,我懒得去搜索。它将指导您构建一个简单的Hello World。要做到这一点,您必须学习如何创建窗口,请求事件,映射窗口以及循环处理事件。你甚至可以在亚马逊上订购一些旧书。 O'Reilly第1卷和第2卷(现在得到最便宜的版本,但没有比X11R4早得多)是必不可少的参考资料,并且可以全面了解这些部分如何协同工作。然而,对于学习,最好的书是Eric Johnson和Kevin Reichard的X Window应用程序编程。

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

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

答案 8 :(得分:1)

我也建议使用lesstif / motif。它也建立在X之上,在我看来,学习曲线并不像GTK或Qt那样陡峭。使用它构建的UI不会像使用GTK或Qt构建的那样复杂。可以找到更多信息here

正如其他人所说,你可能不想X,这是一种痛苦。

答案 9 :(得分:0)

为什么不选择Qt,wxWidgets和GTK中的一个并学习它的内部结构,而不是它的API?我的意思并不仅仅是为了它,而是为了给你最有吸引力的部分做出贡献。通过这种方式,您可以实现自己的目标,并为您和其他人做一些有用的事情。我认为这比为自己分配一个相当人为的任务来构建一个错误工具的数量更有益。

答案 10 :(得分:0)

是的,有这样的“本土”事物:

FBUI,svgalib,directfb,exa(kdrive),SDL,Allegro .. + Wayland,虽然不是主流。

http://home.comcast.net/~fbui/

http://www.svgalib.org/

http://directfb.org/

http://xorg.freedesktop.org/wiki/ExaStatus

+ http://wayland.freedesktop.org/