我想为我的应用程序制作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,则您的代码将无法移植。