GUI库通常被称为" widget工具包",并且有各种各样的跨平台GUI小部件工具包可用,但是它们对于一个优秀的用户体验很少是一个好主意,因为不同的操作系统环境有不同的UI范例(例如,macOS和Ubuntu如何在顶部有一个永远在线的菜单栏,而Windows和其他Linux桌面则没有。)
所以你有两个基本选择:
- 使用单个跨平台GUI工具包 - 这意味着创建单个GUI项目,但限制您使用该工具包的控件和功能选择,并且通常会使您的用户遭受(相对)较差的用户体验,或者是因为你的工具包不使用本机小部件(例如Java,WPF,Qt),或者因为你不能使用平台的本机范例。
- 为每个平台编写新的本机GUI。这意味着更多的工作,但更好的用户体验。
醇>
对于跨平台GUI工具包,主要选项是:
有关三者之间的比较,请参阅此质量检查:Which, if any, achieves Windows native look: GTK+, wxWidgets, Qt, FLTK?
(TL; DR:WxWidgets使用本机控件,但难以开发; Qt提供最佳的开发人员体验,但还有许多其他需要注意的要点)
对于您需要定位的每个平台的原生用户界面,您需要熟悉每个API:
- 的Win32:
- MFC(现代标准的API很丑陋,但确实封装了主要的Win32 UI范例和API,例如Common Controls。但是,要准备好迎接最新的UI功能,例如High-DPI ,双向文本和高质量的2D渲染.GDI / GDI +即将推出,这意味着使用Direct2D - 这很有趣,因为MFC假设GDI)
- UWP / XAML:如果您的应用程序可以沙箱化(并且仅在Windows 10上运行),那么您应该好好看看UWP / XAML(它都是原生的,因此不涉及CLR)。 / LI>
- WPF:使用WPF可以更轻松地创建高质量的用户界面,如果您熟悉您的应用程序依赖.NET Framework并在C#中编写UI代码 - 但是视觉美感没有皮肤的WPF应用程序在Windows 10中急转直下(即它们很丑陋)而且WPF的默认控制集非常不稳定 - 但如果你有办法(即时间,金钱,人),那么你可以获得了很好的结果 - 作为奖励,WPF的XAML通常可以移植到UWP。
- macOS:Cocoa - 你很难用C ++做这件事。如果您要定位macOS,我强烈建议您在Swift(或Objective-C,如果必要)中编写UI层,然后使用C ++桥接链接到其余的应用程序代码。
- Linux:由于Linux只是一个内核,因此" native"小部件取决于用户的桌面环境 - 但大多数桌面程序似乎都使用GTK。如果您打算使用GTK,那么您也可以使用GTK的跨平台功能来支持Windows和macOS。
总之:困难和繁重的工作。 :) - 并解释为什么今天(2017年中)的许多软件标题通常直接在网络上构建为Web应用程序(例如Facebook,StackOverflow,SalesForce)或使用Electron(例如Slack,VS Code,Atom)或某些东西的托管Web视图其他托管网络(PhoneGap应用程序,Spotify等)。