如何使用C ++创建经典GUI

时间:2016-11-20 06:47:31

标签: c++ user-interface javafx

是否有一种使用cpp创建经典GUI的方法,就像JavaFX的情况一样?我想创建像浮动按钮,表格,图形等元素。我知道像qt这样的工具,但我不熟悉它。我尝试过win32 API,但它仅适用于Windows。

1 个答案:

答案 0 :(得分:5)

GUI库通常被称为" widget工具包",并且有各种各样的跨平台GUI小部件工具包可用,但是它们对于一个优秀的用户体验很少是一个好主意,因为不同的操作系统环境有不同的UI范例(例如,macOS和Ubuntu如何在顶部有一个永远在线的菜单栏,而Windows和其他Linux桌面则没有。)

所以你有两个基本选择:

  1. 使用单个跨平台GUI工具包 - 这意味着创建单个GUI项目,但限制您使用该工具包的控件和功能选择,并且通常会使您的用户遭受(相对)较差的用户体验,或者是因为你的工具包不使用本机小部件(例如Java,WPF,Qt),或者因为你不能使用平台的本机范例。
  2. 为每个平台编写新的本机GUI。这意味着更多的工作,但更好的用户体验。
  3. 对于跨平台GUI工具包,主要选项是:

    • Qt的
    • GTK +
    • wxWidgets的

    有关三者之间的比较,请参阅此质量检查: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等)。