【问题标题】:Simplest possible Ubuntu GUI app最简单的 Ubuntu GUI 应用程序
【发布时间】:2011-01-15 12:10:29
【问题描述】:

在 Windows 上,无论你使用哪个框架,所有框架最终都需要调用用户态 user32::CreateWindowEx API 来实际在桌面上创建一个窗口。

在 Ubuntu,或者实际上是一般的 Linux 系统上,似乎可以选择使用 Wx、Qt 或 GTK+ 之类的小部件框架来创建 GUI 应用程序,但所有这些框架都感觉像是在包装更基本的东西。这些都直接与 Linux 上的 X 对话吗?我以为 Ubuntu 正在转向非 X 窗口管理器,那么他们将使用什么?

我将使用什么库来访问所有这些框架使用的窗口管理器?

【问题讨论】:

    标签: c linux user-interface ubuntu


    【解决方案1】:

    它们都在包装 Xlib ,如果您切换到非 X 服务器,您将需要一个 Xlib 替换以及它(或 Xlib 包装器)。

    【讨论】:

    • 但这还不是最低的可以跌,不是吗?我的意思是,一个人可以完全从头开始创建自己的 X 客户端实现,而不使用 Xlib 或 XCB 或其他任何东西,不是吗?可以说 Xlib 和 XCB 都是也是 包装器 - 即围绕 X 协议。如果一个人真的想把自己从所有包装器中解放出来,那么应该从构建自己的协议版本开始。我在这里弄错了吗?
    • @Fyodor Soikin,事实上你甚至可以在组装时发疯。
    • 所以说真的,现在一个新项目,应该选择 XCB 而不是 XLib?
    • @Chris Becke,现在 Xlib 只是一个包装器,但是 XCB 是要走的路,因为它的线程安全。
    • 实际上,不要在 Xcb 和 Xlib 之间进行选择,而是使用更高级别的工具包(Qt4、Gtk3、...)。
    【解决方案2】:

    原则上,您可以通过学习 X11 协议和所有相关扩展(ICCCM、桌面约定...)来编写自己的 X 库,但这是一项艰巨的任务。如果这样做,您将使用最低级别的系统调用(send、recv、...)。

    某些语言(SML、Common Lisp、Ocaml)的一些实现选择在不使用 Xlib 或 XCB C 库的情况下实现 X11 协议。但这是一项艰巨的任务,我不会推荐它。

    Ubuntu 所说的 Wayland 还不成熟,但工具包库(如 GTK 和 Qt)正在慢慢支持它(除了支持 X11)。

    今天,您还可以选择开发基于 Web 的应用程序,而不是基于 X11 的应用程序。有时 HTTP + XHTML + AJAX 比从头开始重新编写 X11 的东西更简单。

    但不要单独开始编写图形堆栈...这是一项太大的任务...

    【讨论】:

    • 最简单的图形用户应用程序可能是 Qt 或 GTK 上的 hello world 窗口,但是 Qt 和 GTK 都携带很多行李,因为 X11 协议很大(它是为不同的硬件设计的我们今天使用的那个!),有些人甚至可能质疑它的设计(以及它的目标是支持机制而不是政策)。作为新手,您不需要关心窗口管理器。 Qt 或 Gtk 工具包可以做到这一点。
    【解决方案3】:

    X 通过精心指定的网络协议运行,因此如果您愿意,您可以将该协议直接与服务器对话。在实践中,GUI 工具包包装了 Xlib(可能还有 Xt)。传统上 Xlib 尽可能低,但现在 Xlib 已在一个更干净的低级 X 协议库“xcb”之上重新实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-12
      • 1970-01-01
      相关资源
      最近更新 更多