如果有的话,可以实现Windows原生外观:GTK+,wxWidgets,Qt,FLTK
Which, if any, achieves Windows native look: GTK+, wxWidgets, Qt, FLTK?
我需要编写一个应用程序,该应用程序在视觉上与为Windows XP/Vista/7本地编写的应用程序没有区别,使用最现代的Visual Studio默认提供的任何内容。但是我正在使用MinGW和Vim(C++(进行开发。
特别是,我希望以下控件在上述三个版本的 Windows 上是本机的:窗体镶边、按钮、复选框、菜单、组合框、进度条、滚动条、格式文本框。这对我来说就足够了。
我知道,如果您根据需要加载 GdiPlus 和其他类似riched32.dll
的东西,并使用 Windows API 实例化控件,那么操作系统将替换其版本的 GdiPlus 或其他库,因此它看起来像 XP 上的 XP 样式控件、Vista 上的 Vista 等。
但我不想使用普通的Windows API,因为即使检索默认字体也需要半页代码,无论我想做什么,都会有类似的故事。所以我想使用一个工具包。
wxWidgets,Qt,GTK+,FLTK似乎是使用最广泛的。但它们都是跨平台的。我使用过跨平台应用程序,其中许多都有外部 GUI 控件(我称之为小部件(。所以我的问题是:这些工具包中的哪一个可以生成上面列出的真正本机外观的 UI 控件,并在上面列出的三个版本的 MSWin 上正确显示?
我已经在谷歌图片中输入了它们中的每一个+"窗口",但很难说,除了FLTK可能做不到。你们中的许多人一定知道答案......
我不会谈论FLTK,因为我不知道它。
- wxWidgets使用平台的原生工具包(Linux上的GTK,Win32 GUI API在Windows上,Cocoa在MacOS X上(。
- GTK 使用主题 API 来伪造平台的外观和感觉(GTK2 上的自定义主题引擎,GTK3 上基于 CSS 的引擎(。
- Qt使用样式来伪造平台的外观和感觉。
根据我自己的经验,wxWidgets API 非常丑陋,因为它在一个或另一个平台上有太多的方法可用,使得东西不可移植,除非你解决它。与GTK+和Qt不同,它还在用作后端的工具包之上添加了自己的错误层。但是,它努力使平台的本机外观,因为它使用本机工具包。
GTK+ 3在Windows上仍然有一些粗糙的边缘,它从GTK+ 3.6开始正式支持。GTK+ 项目将 Windows 二进制文件的分发委托给 MSYS2 项目。由于您已经在使用MinGW,因此这几乎是相同的环境。它们与GTKmm具有良好的C++绑定。但是,您可能需要做一些工作才能为您的 Windows 版本设置正确的主题。
Qt是跨平台C++开发的不错选择,主要目标是Windows,试图模仿平台的本机外观和感觉,但也有自己的主题限制。
综上所述,只有2种方法:
- 提供自己的小部件的工具包,并通过提供主题(GTK+和Qt(来尝试看起来像本机平台
- 使用本机小部件但将其 API 隐藏在抽象层后面的工具包 (wxWidgets(
两者都有其优点和缺点。
撇开实现细节不谈,wxWidgets的理念是,而且一直是,尽可能原生地看起来。我们,wxWidgets开发人员,并不总是实现与本机应用程序没有区别的目标,但我们一直在努力做到这一点。 AFAIK 对于Qt来说,这不是一个重要的目标,对于GTK+来说绝对不是,所以在我看来,如果你真的想为你的用户提供最好的体验,wxWidgets是你最好的选择, 尤其是在OS X下。
为了更准确地回答您的问题,您上面列出的所有内容都是使用 Windows 的 wxWidgets 中的本机控件实现的(不过,富文本控件在其他平台下本身不可用(。
IUP - 可移植用户界面库使用本机小部件、C API 和 Lua 绑定。
我将 Java 用于本机跨平台而不更改代码,如果您想使用小性能与独立可执行文件,请使用 C/C++ wxwidgets 专门跨平台,使用 C/C++ Winapi 用于 Windows 和 X11 用于 GNU Linux 本机平台和终端控制台,如果您希望您的软件快速更新,请使用 Python 用于脚本控制台和平台, 并将组件用于一个简单的纯控制台。有时我将它们与Windows上的共享库.dll和GNU Linux上的.so结合起来。我喜欢在硬件要求很小的编程研究中做比较性能。
- 如何在运行中期切换GTK CSS style_context
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 如何使用 GTK 3 正确设置默认文本
- Gtkmm 会不断检查 Gtk::日历上的所选日期是否发生变化
- 使用 Gtkmm 以编程方式选择 Gtk::TextView 中的文本
- 是否可以编译 Gtk+ 应用程序以同时在 Gtk 2 和 3 上运行
- GTK 最大化表单 C++
- GTK:完全摆脱系统主题/CSS
- GTK C++:找不到信号处理程序 您是否使用 -rdynamic 进行了编译?
- 如何从 Gtk::窗口调用派生对象的析构函数
- Gtk::带有set_icon_name的窗口图标集在 wayland 上不起作用
- GTK 3 C++按钮中带有标签的图标
- 外观 MFC 滚动条
- Gtkmm:创建一个Gtk::ComboBox,其中列出Gtk::DrawingArea
- C++:二进制到十进制w/转换过程的外观
- 用于存储分组关系和支持外观的最佳数据结构
- 用GTK创建逻辑门模拟器,如何制作放置区域
- 在C++中设置仅包含每个类的一个外观的数据结构
- 使用 GTK 将 EGL 图像渲染到帧缓冲区
- 如果有的话,可以实现Windows原生外观:GTK+,wxWidgets,Qt,FLTK