如果有的话,可以实现Windows原生外观:GTK+,wxWidgets,Qt,FLTK

Which, if any, achieves Windows native look: GTK+, wxWidgets, Qt, FLTK?

本文关键字:GTK+ 外观 wxWidgets FLTK Qt 原生 实现 如果 Windows      更新时间:2023-10-16

我需要编写一个应用程序,该应用程序在视觉上与为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结合起来。我喜欢在硬件要求很小的编程研究中做比较性能。