代码之家  ›  专栏  ›  技术社区  ›  David Grayson

Qt GUI主题看起来很过时

  •  20
  • David Grayson  · 技术社区  · 7 年前

    Qt Widgets 对于Microsoft Windows,它看起来很过时,就像在Windows 2000上运行一样,如下面的左窗口所示。但是,如果我使用预构建的mingw-w64-x86_64-qt5-static包(版本5.8.0-1)从 MSYS2 ,它看起来像一个很好的现代Windows应用程序,如下面的右窗口所示。如何修复我的Qt版本,使用它构建的gui看起来很好?是否缺少配置选项?

    Left: Qt compiled by me.  Right: Qt compiled by MSYS2 project

    QWindowsVistaStyle 班我注意到,当我在MSYS2中编译程序时,我必须添加 -luxtheme 因为那个类引用了一些函数,比如 GetThemeColor

    交叉编译的Qt构建详细信息

    我使用 commit f51d834 我的nixcrpkgs存储库。如果您查看该提交中的代码,它将准确地显示运行了哪些命令来构建mingw-w64交叉编译器、构建Qt和构建Qt示例,包括动态布局。如果安装了,您可以自己构建它 Nix 下载 nixcrkpkgs ,然后运行 nix-build -A pkgs.i686-w64-mingw32.qt.base-examples 在nixcrpkgs目录中。你可以看到 my build recipe for the Qt package in that commit

    我跑了 this script 在MSYS2的一个MINGW64外壳中构建了示例,并取得了良好的效果。它依赖于MSYS2的mingw-w64-x86_64-qt5-static包 build recipe for that package

    5 回复  |  直到 7 年前
        1
  •  18
  •   Jonathan Owens    6 年前

    从Qt5.9.1升级到Qt5.12后,我也遇到了同样的问题。

    放置qwindowsvistastyle。dll,我发现它在Qt\5.12.0\msvc2017\U 64\plugins\styles中,需要放在我的applicationDir\style目录中。

        2
  •  10
  •   Adrien Leravat    6 年前

    小部件

    setStyle

    QApplication::setStyle("fusion");
    

    文件支持以下内容:

    • “融合”
    • “macintosh”


    Qt快速

    QQuickStyle::setStyle("Material");

    有关更多详细信息,您可以查看该文档页面:

        3
  •  5
  •   David Grayson    7 年前

    src/widgets/configure.json 文件,您可以看到它检查是否存在 uxtheme.h ,并且 是编译 windowsxp windowsvista 风格通过查看Qt config.log uxtheme.h uxtheme.h windows.h 预先我核实了 windowsvista 通过查看 src/widgets/qtwidgets-config.pri windowsvista

    我试着添加 -style-windowsxp -style-windowsvista Qt的configure命令的选项,但这些选项只会导致错误,因为

    uxtheme 共测试:

    diff -ur qt58-orig/src/widgets/configure.json qt58/src/widgets/configure.json
    --- qt58-orig/src/widgets/configure.json        2017-05-28 02:07:07.625626151 -0700
    +++ qt58/src/widgets/configure.json     2017-06-27 21:25:52.752628339 -0700
    @@ -28,11 +28,6 @@
         },
    
         "tests": {
    -        "uxtheme": {
    -            "label": "uxtheme.h",
    -            "type": "files",
    -            "files": [ "uxtheme.h" ]
    -        }
         },
    
         "features": {
    @@ -57,7 +52,7 @@
             },
             "style-windowsxp": {
                 "label": "WindowsXP",
    -            "condition": "features.style-windows && config.win32 && !config.winrt && tests.uxtheme",
    +            "condition": "features.style-windows && config.win32 && !config.winrt",
                 "output": [ "styles" ]
             },
             "style-windowsvista": {
    

        4
  •  2
  •   Steve Rogers    6 年前

    在从静态Qt 5.6.3升级到静态5.12.0时,我也遇到了同样的问题。在我尝试用QApplication::setStyle()手动设置“windowsvista”样式并注意到调试时返回null后,我解决了这个问题。事实证明,在5.12.0中,windowsvista风格是它自己独立的插件,你需要链接到plugins/styles/qwindowsvistastyle。lib并将Q\u IMPORT\u插件(qwindowsvistatyleplugin)添加到包含主功能的cpp文件中。之后,无需手动设置样式,将自动选择样式。

        5
  •  0
  •   Clément Vicart    3 年前

    我知道这个主题有点过时,但我找到了一个解决这个问题的简单方法,在Qt 6中仍然不起作用

    我的环境

    将此行添加到CMakeLists.txt的末尾:

    add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "${QT_INSTALL_PATH}/plugins/styles/qwindowsvistastyle${DEBUG_SUFFIX}.dll" "$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/styles")