如何让我的Qt C++程序在Windows中打开控制台?

Nek*_*eko 9 c++ windows console qt cmake

我在Qt Creator中创建了一个应用程序,cmake和MinGW作为编译器.我已经看到这个问题正在为其他人解答,但他们使用.pro文件的常规Qt项目,而我使用CMakeLists.txt文件.所以这些帖子对我没用.

问题是我的应用程序在启动时会打开一个控制台,像往常一样,关闭此控制台也会关闭应用程序.我想让应用程序不要打开控制台,这样对于那些不需要任何调试信息等的用户来说,它更加用户友好.

Bar*_*art 10

您的 CMakeLists.txt 中很可能会有如下一行:

ADD_EXECUTABLE(exename ....)
Run Code Online (Sandbox Code Playgroud)

当然,这些点是进一步的论点。将此更改为:

ADD_EXECUTABLE(exename [WIN32] ...)
Run Code Online (Sandbox Code Playgroud)

指定它是 Win32 应用程序而不是控制台应用程序。

或者,可以在 CMAKE 网站上找到“如果WIN32给出该属性,WIN32_EXECUTABLE将在创建的目标上设置。” 当设置 WIN32_EXECUTABLE 时,它将“在 Windows 上使用 WinMain 入口点构建可执行文件”。


max*_*zig 10

默认情况下,与 qmake 相比,cmake 在 windows 下构建启用控制台窗口的 Qt 应用程序(windows 二进制文件可以使用不同的入口点 - 控制台窗口就是其中之一)。

您可以通过WIN32_EXECUTABLE在可执行文件上设置cmake 属性来禁用出现的控制台窗口。

这可以通过设置一个add_executable选项来实现,即

add_executable(myexe WIN32 ...)
Run Code Online (Sandbox Code Playgroud)

或通过显式设置属性:

set_property(TARGET main PROPERTY WIN32_EXECUTABLE true)
Run Code Online (Sandbox Code Playgroud)

set_property()当控制台窗口应有条件地禁用时,使用会很有帮助,例如:

if(CMAKE_BUILD_TYPE STREQUAL "Release")
  set_property(TARGET main PROPERTY WIN32_EXECUTABLE true)
endif()
Run Code Online (Sandbox Code Playgroud)

WIN32_EXECUTABLEWindows 以外的平台上编译时,该属性无效(参见CMAKE_WIN32_EXECUTABLE)。

WIN32cmake 变量一样,该WIN32_EXECUTABLE属性还在编译 win64 可执行文件时配置控制台窗口。