【问题标题】:Qt app on Windows 10 behaves differently when launched from Qt Creator从 Qt Creator 启动时,Windows 10 上的 Qt 应用程序的行为有所不同
【发布时间】:2020-12-10 13:13:44
【问题描述】:

我正在尝试在 Windows 10 上构建 Qt 应用程序,当我从 Qt Creator IDE 运行它时,以及在它之外运行 exe 时,我得到了不同的外观。

来自 Qt 创建者

Qt Creator 之外

我希望它始终看起来像在 Qt Creator 中的样子:一个更好看的按钮,没有多余的第二个窗口。

复制:使用 CMake 作为构建系统和 Desktop Qt 5.15.0 MSVC2019 64 位套件在 Qt Creator(一个 Qt Widgets 应用程序)中创建一个新项目。使用设计器将按钮添加到 .ui 并编译。要让应用程序在 IDE 之外运行,请将 dll Qt5Cored.dll、Qt5Guid.dll、Qt5Widgetsd.dll 和 platform/qwindowsd.dll 放在它旁边,它们都来自 Qt 安装中的 5.15.0/msvc2019_64 文件夹。

编辑:看起来多余的窗口只有在我使用 CMake 时才会出现,它不会出现在使用 qmake 制作的项目中。但是,我正在向现有项目添加 GUI,因此“使用 qmake”不是解决方案。

【问题讨论】:

    标签: c++ qt visual-c++


    【解决方案1】:

    控制台窗口问题是由于缺少add_executable 的 WIN32 参数引起的,如 Swift 的回答中所述。但是,主题问题是由不同的原因引起的。

    根据this thread,从 Qt 5.14 开始,如果可执行文件的 dll 存储在它旁边并且没有样式文件夹,则使用 Windows 主题(看起来像 Windows 95)。但是,添加 dll 样式/qwindowsvistastyled.dll 可以解决此问题。

    【讨论】:

      【解决方案2】:

      Qt 环境的本质是,如果您没有在程序代码中指定,Qt 会从运行它的环境中继承样式。请参阅QApplication-style 命令行标志。

      Qt Creator 是用 Qt 编写的,听起来它在您的安装中设置了非默认样式。当您从 QT Designer 预览表单时,您可以选择该表单应显示的样式。

      看起来控制台窗口可能是 CMake 项目设置的结果,例如add_executable 在没有 WIN32 参数的情况下被调用。 https://cmake.org/cmake/help/latest/command/add_executable.html

      它也可以由项目中的某些东西创建,例如如果有初始化 Console API 的框架。

      【讨论】:

      • 啊哈,这很有道理。这解决了主题的问题,但多余的窗口呢?
      • 奇怪的是,只有在我使用 CMake 构建时才会出现黑色窗口。如果我改为使用 qmake,则问题不存在。但是,由于我正在向现有项目添加 GUI 组件,因此切换到 qmake 对我来说不是一个解决方案。
      • 等等,你是说黑色控制台?那是您的项目创建的东西。您正在调用导致创建控制台窗口的东西(在 Windows 中,它是一个特殊的 API,默认情况下不会创建,但可以从各种框架中调用)
      • @RaymondWright add_executable 有 WIN32 参数吗?
      • 它没有,添加它解决了问题。非常感谢!
      猜你喜欢
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-13
      • 2011-09-08
      相关资源
      最近更新 更多