Clion 创建的Qt程序界面是老式风格

文章讲述了在Clion2023.1.1版本中,无论使用MinGW还是MSVC编译器创建Qt程序,都可能出现界面显示为旧风格的问题。原因是缺少qwindowsvistastyle.dll动态库。解决方案是将Qt安装路径下的styles文件夹复制到程序路径下,或者在CMakeLists.txt中添加定制命令来复制该动态库。通过这些方法,可以修复Qt程序的界面样式问题。
摘要由CSDN通过智能技术生成

环境:

  • Clion版本:CLion 2023.1.1
  • Qt 5.15.2

问题

当使用Clion创建Qt程序,不管是选择MinGW编译器还是MSVC编译器,显示出来的界面都很old style

即老式的界面风格,如图所示:
在这里插入图片描述

原因

产生这个问题的原因是缺少qwindowsvistastyle.dll动态库,因为Clion生成的CMakeLists.txt文件只拷贝了必要的动态库文件,它并没有将qwindowsvistastyle.dll文件拷贝过来。

if (WIN32 AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
    set(DEBUG_SUFFIX)
    if (MSVC AND CMAKE_BUILD_TYPE MATCHES "Debug")
        set(DEBUG_SUFFIX "d")
    endif ()
    set(QT_INSTALL_PATH "${CMAKE_PREFIX_PATH}")
    if (NOT EXISTS "${QT_INSTALL_PATH}/bin")
        set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
        if (NOT EXISTS "${QT_INSTALL_PATH}/bin")
            set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
        endif ()
    endif ()
    if (EXISTS "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll")
        add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
                COMMAND ${CMAKE_COMMAND} -E make_directory
                "$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/")
        add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
                COMMAND ${CMAKE_COMMAND} -E copy
                "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll"
                "$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/")
    endif ()
    foreach (QT_LIB Core Gui Widgets)
        add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
                COMMAND ${CMAKE_COMMAND} -E copy
                "${QT_INSTALL_PATH}/bin/Qt5${QT_LIB}${DEBUG_SUFFIX}.dll"
                "$<TARGET_FILE_DIR:${PROJECT_NAME}>")
    endforeach (QT_LIB)
endif ()

解决方案

根据选择的编译器,去对应Qt安装路径下将styles文件夹复制到可执行程序路径下

MinGW

D:\Qt\5.15.2\mingw81_64\plugins\styles

MSVC

D:\Qt\5.15.2\msvc2019_64\plugins\styles

再次运行,即可发现,界面风格正常了。这应该算Clion的小瑕疵。

效果如图:
在这里插入图片描述

当然,我们还可以对CMakeLists.txt进行修改,也是最推荐的做法。添加以下语句即可

    if (EXISTS "${QT_INSTALL_PATH}/plugins/styles/qwindowsvistastyle${DEBUG_SUFFIX}.dll")
    add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
            COMMAND ${CMAKE_COMMAND} -E make_directory
            "$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/styles/")
    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/")
    endif ()

注意:由于Clion、Qt版本有差异,会导致路径不同,自行修改。

Qt GUI theme looks old-fashioned

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 如果您在使用 CLion 编译 Qt 程序时遇到错误,请检查以下内容: 1. 确保已经安装了 Qt 库和相关的开发工具,并已正确配置环境变量。 2. 检查代码是否有语法错误,是否有找不到的头文件和未定义的符号。 3. 确保 CLion 已经正确配置了 Qt 库路径,并使用了正确的编译器。 4. 检查是否在项目文件中包含了正确的 qmake 文件。 如果以上步骤都无法解决问题,请在问题发生时的错误信息,以及代码的相关部分提供给我,我将尽力为您解答。 ### 回答2: 在使用CLion编译Qt程序时,常见的错误有很多种,下面列举一些可能遇到的问题和解决方法。 1. 编译器选择错误:CLion默认使用CMake来构建项目,但Qt通常使用qmake构建项目。需要在CMakeLists.txt中添加相关Qt模块的库和头文件路径。 2. Qt模块缺失:CLion可能无法找到Qt的一些模块,导致编译错误。需要在CMakeLists.txt中添加相关的模块。 3. Qt版本不匹配:如果您的项目使用的Qt版本与CLion支持的版本不匹配,可能会导致编译错误。请确保您的Qt版本与CLion兼容。 4. 编译器标志设置错误:有时,编译器标志设置不正确也会导致编译错误。请检查您的CMakeLists.txt文件中的编译器标志设置是否正确。 5. 缺少库文件:如果项目依赖于某些库文件,但CLion无法找到这些文件,可能会导致编译错误。请确保库文件正确安装,并在CMakeLists.txt文件中添加相关的库路径。 以上是一些常见的CLion编译Qt程序报错的问题及解决方法,希望对您有帮助。如果还有其他问题,请提供具体错误信息以便进一步排查。 ### 回答3: 要回答关于CLion编译QT程序报错的问题,首先我们需要了解报错的具体内容。不同的报错可能对应着不同的问题。 首先,我们需要确保在CLion中正确设置了QT的路径。在CLion的设置中,找到"Build, Execution, Deployment",然后选中"Toolchains"。确保你已经正确地设置了QT的路径。同时,确保你已经在CMakeLists.txt文件中包含了正确的QT模块。 其次,检查报错信息中提到的具体问题。报错信息可能会有诸如未定义的引用、找不到头文件等等。根据报错信息,逐一解决问题。你可能需要检查你的代码中是否有语法错误,或者是否正确地引入了需要的头文件。 如果报错信息中包含了特定的函数或类,可以在QT官方文档中查找该函数或类的定义和用法。确保你正确地使用了这些函数或类。 此外,还可以尝试清除CLion的缓存并重新编译项目。有时候缓存可能会导致一些奇怪的问题。 最后,如果以上步骤都没有解决问题,可以尝试在相关的编译器环境下手动编译和运行代码。通过这种方式,你可以更直观地看到报错信息,并更容易找到问题所在。 总之,解决CLion编译QT程序报错的方法需要根据具体的报错信息来确定。通过逐一检查代码、设置和环境,通常能够找到解决问题的办法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值