【问题标题】:platform independent GUI平台无关的图形用户界面
【发布时间】:2011-08-28 15:47:43
【问题描述】:

我想为我的应用程序制作 GUI。它应该在多个平台上工作。我希望大部分代码对于所有操作系统(unix、windows、MAC)都是可移植的。

GTK 和 GLib 看起来是一个很好的解决方案。我也想使用原生 API

这一切怎么做??

【问题讨论】:

  • 滥用 HTML5 怎么样?
  • 谁能用 HTML 开发 Windows GUI?有什么例子吗?
  • 当然。 HTML、JavaScript、CSS、HTML5 的画布等绰绰有余。我见过一些包含 GUI 网络浏览器的产品。

标签: c++ c windows user-interface unix


【解决方案1】:

我喜欢 WxWidgets,非常好用。它具有多种语言的绑定,您可以轻松地将其 C++ 实现与 Win32 API(C 代码)混合。

http://www.wxwidgets.org/

一个更轻量级的替代方案是 FLTK

http://www.fltk.org/index.php

【讨论】:

    【解决方案2】:

    Qt 似乎是一种选择。但是,如果您想使用 Windows API,它将无法移植。 Windows 中的 Qt 将使用 CreateWindow 等内容,但您不会。例如。反汇编程序 IDA 最近用 Qt 重写,现在是跨平台的。

    【讨论】:

      【解决方案3】:

      Qt 可能对此有好处。

      【讨论】:

        【解决方案4】:

        您必须实现 PAL平台抽象层)。
        该层应该通过提供不依赖于平台的接口来提供对实际平台调用的抽象。一旦您转移到另一个平台,只需为该特定平台实现 PAL,应用程序的其余部分可以按原样使用。

        【讨论】:

        • 这不是 WxWidgets、QT 等提供的吗?
        • 您好,感谢您的帮助。你能告诉我任何使用 PAL 技术的示例代码(或应用程序)吗?
        • @user739711:大多数软件都实现了 PAL,这是一种常见的做法,正如@Christoffer:正确指出的 WxWidgets,QT 在 GUI 的情况下已经这样做了。 PAL 主要在中间件级别实现,介于中间件和操作系统系统调用之间。
        【解决方案5】:

        请查看 Qt 框架。这将帮助您创建跨平台的 GUI 应用程序。您将不得不依赖 Qt 为 Native 平台任务提供的 API,否则如果您继续使用本机 API,您的代码将无法移植。

        【讨论】:

          【解决方案6】:

          我认为在您所针对的每个平台上学习本机窗口层是值得的。

          这样:

          • Cocoa
            Cocoa 是原生的 Mac OS X 窗口层。它是一个 Objective-C api,但它并不难学,而且很容易与 C 或 C++ 互操作。
          • Win32 API
            Windows API 是一个 C API,它实现了 Windows 原生小部件集。
          • GTK+
            Unix/Linux 世界更加复杂,因为它可能针对完全不同的小部件集实现编写应用程序。您需要选择目标环境默认桌面使用的小部件集:如果您的目标是 Ubuntu,那么 GTK+ (2) 是访问 Unity 桌面“本机”小部件集的目标 API。

          我个人不喜欢 QT,因为他们发明了自己的元编译器,使得 QT 代码(具有讽刺意味)难以移植到非 QT 环境。然而,QT 确实在可能的情况下呈现了原生 Widget 集的抽象。

          wxWidgets 是一个使用方便的封装 API,因为它已经在相关平台上封装了 Win32Api、Cocoa api 和 GTK+。但是我避免使用它,因为 Wx 基于 Microsoft MFC - 一个有点过时的 Document/View C++ 框架,我想了解底层平台。


          • 在 QT 中进行了一些更正。

          【讨论】:

          • 你错了; Qt 现在使用本机小部件集,不再有模拟,只是一个抽象层。 Qt 和 GTK+ 一样在 Linux 上是原生的。
          猜你喜欢
          • 2016-01-30
          • 2012-10-19
          • 1970-01-01
          • 1970-01-01
          • 2013-01-23
          • 1970-01-01
          • 2016-06-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多