独立于平台的图形用户界面

platform independent GUI

本文关键字:图形用户界面 平台 于平台 独立      更新时间:2023-10-16

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

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

如何做到这一切??

Qt可能对此有好处。

我喜欢

WxWidgets,真的很容易使用。它具有多种语言的绑定,您可以轻松地将其C++实现与 Win32 API(C 代码)混合使用。

http://www.wxwidgets.org/

更轻量级的替代方案是 FLTK

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

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

Qt似乎是一个选择。但是如果你想使用Windows API,它将不是可移植的。Windows中的Qt将使用CreateWindow等东西,但你不会。例如,反汇编器IDA最近用Qt重写,现在是跨平台的。

我认为学习

您针对的每个平台上的本机窗口层是值得的。

因此:

  • 可可
    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确实在可能的情况下提供了原生小部件集的抽象。

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


  • 编辑了一些更正 wrt QT。

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