当我自己从源代码中交叉编译Qt 5.8.0,并使用它来构建Qt Widgets中的Qt“Dynamic Layouts”示例程序时,它看起来很老旧,就像在Windows 2000上运行一样(如下面左侧的窗口所示)。然而,如果我使用MSYS2预编译的mingw-w64-x86_64-qt5-static包(版本为5.8.0-1)编译完全相同的程序,则看起来像一个漂亮的现代Windows应用程序(如下面右侧的窗口所示)。如何修复我的Qt版本,使得使用它构建的GUI界面看起来漂亮?我是否错过了某个配置选项?
请注意QWindowsVistaStyle
类。我注意到当我在 MSYS2 编译我的程序时,我必须添加 -luxtheme
,因为该类引用了一些来自那里的函数,如 GetThemeColor
。这些函数仅在 Windows Vista 及更高版本中可用。当我在 Linux 上使用自己的 Qt 进行交叉编译时,我不需要该库,所以也许该类在我的构建中被禁用了。
交叉编译 Qt 构建详细信息
我使用我自己的nixcrpkgs存储库的提交f51d834构建了交叉编译的Qt和旧版的Dynamic Layouts示例。如果您查看该提交中的代码,它将向您展示构建mingw-w64交叉编译器、构建Qt以及构建Qt示例(包括Dynamic Layouts)所运行的确切命令。如果您安装Nix,下载nixcrkpkgs,然后在nixcrpkgs目录中运行nix-build -A pkgs.i686-w64-mingw32.qt.base-examples
,则可以自行构建它。您可以在该提交中查看Qt软件包的我的构建配方。
MSYS2 构建细节
我在 MSYS2 的 MINGW64 shell 中运行 此脚本 来构建示例,并获得了良好的结果。它依赖于 MSYS2 的 mingw-w64-x86_64-qt5-static 包。你可以查看 该包的构建配方。
QStyleFactory::keys()
。 - Benjamin Tsrc/widgets/configure.json
文件。Windows Vista 和 XP 主题依赖于 "uxtheme.h"。从我的 config.log 中可以看到 uxtheme.h 的测试失败了,但没有说原因。我可能需要在 CFLAGS 中设置_WIN32_WINNT
或获取有关为什么测试失败的更多详细信息。 - David Grayson