平台独立的GUI

时间:2011-05-19 07:35:50

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

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

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

如何做到这一切??

6 个答案:

答案 0 :(得分:11)

Qt可能对此有好处。

答案 1 :(得分:5)

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

http://www.wxwidgets.org/

更轻量级的选择是FLTK

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

答案 2 :(得分:3)

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

我认为值得学习你所针对的每个平台上的原生窗口层。

因此:

  • Cocoa
    Cocoa是原生的Mac OS X窗口层。它是一个Objective-C api,但它不难学,并且很容易与C或C ++互操作。
  • Win32 API
    Windows API是一个实现Windows本机窗口小部件集的C API。
  • 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的一些更正。

答案 5 :(得分:0)

请看一下Qt Framework。这将有助于您创建跨平台GUI应用程序。您必须依赖Qt提供的API for Native平台任务,否则,如果继续使用本机API,则您的代码将无法移植。