2016-11-20 50 views
1

有没有像JavaFX那样用cpp创建经典的GUI的方法?我想创建浮动按钮,表格,图形等元素。我知道像qt这样的工具,但我不确定它。我试过win32 API,但它只适用于Windows。如何用C++创建经典的GUI

+1

我不同意JavaFX是一个经典的GUI框架。用于C#的JavaFX或swing或WPF是GUI的高级框架。 java.awt类似于传统的GUI,并且在这个区域有很多C++ GUI库。最接近JavaFX的是QT afaik,[用他们的动画脚本和所有](https://www.youtube.com/watch?v=VAhLnJc5iEY)。 – zahir

回答

5

图形用户界面库通常被称为“窗口小部件工具包”,并且有各种可用的跨平台GUI窗口小部件工具包,但它们很少是很好的UX用户的好主意,因为不同的操作系统环境具有不同的UI范例例如,macOS和Ubuntu在顶部有一个永远在线的菜单栏,而Windows和其他Linux桌面则没有)。

所以,你有两个基本的选择,使:

  1. 使用单一的跨平台GUI工具包 - 这意味着创建一个GUI项目,但限制你的控件和功能,工具的选择,一般或者因为您的工具包不使用本机窗口小部件(例如Java,WPF,Qt),或者因为您无法使用平台的本地范例,所以您的用户遭受(相对)较差的用户体验。
  2. 为每个平台编写一个新的本机GUI。这意味着更多的工作,但更好的用户体验。

对于跨平台的GUI工具包,主要选项有:

  • Qt的
  • GTK +
  • wxWidgets的

对于三之间的比较,请参阅本QA: Which, if any, achieves Windows native look: GTK+, wxWidgets, Qt, FLTK?

(TL; DR:WxWidgets uses na tive控制但很难发展; QT提供了最好的开发者体验,但有你需要知道的)

对于每个你需要的目标平台上的原生UI许多其他子弹的点,你需要熟悉每个API:

  • 的Win32:
    • MFC(空气污染指数是按现代标准难看,但封装主要的Win32 UI模式和API,如公共控件然而,对于上坡的战斗准备,以支持后者天。 UI功能,如高DPI,双向文本和高质量的2D渲染,GDI/GDI +即将出台,这意味着使用Dir ect2D - 这很有趣,因为MFC会采用GDI)
    • UWP/XAML:如果您的应用程序可以被沙箱化(并且只能在Windows 10上运行),那么您应该仔细看一下UWP/XAML(它都是原生的,所以CLR不参与)。
    • WPF:使用WPF可以更轻松地创建高质量的用户界面,如果您对使用.NET Framework进行依赖并在C#中编写UI代码的应用程序感到满意 - 但是,皮肤上的WPF应用程序在Windows 10中暴跌(即它们很丑陋),WPF的默认控制集非常有意思 - 但如果你有手段(即时间,金钱,人),那么你可以获得很好的结果 - 作为奖励WPF的XAML通常可以移植到UWP中。
  • macOS:可可 - 你将很难在C++中做到这一点。如果你的目标是macOS,我强烈建议你在Swift中编写你的UI层(如果你需要,可以使用Objective-C),然后使用C++桥连接到你的其他应用程序代码。
  • Linux:由于Linux只是一个内核,所以“本机”小部件集取决于用户的桌面环境 - 但大多数桌面程序似乎都使用GTK。如果你打算使用GTK,那么你也可以使用GTK的跨平台功能来支持Windows和MacOS。

总之:这很困难,很多工作。 :)并解释了为什么现在(2017年中)的许多软件通常都是直接在网络上构建为Web应用程序(例如Facebook,StackOverflow,SalesForce)或使用Electron(例如Slack,VS Code,Atom)其他托管的webiew(PhoneGap应用程序,Spotify等)。