如何让我的Qt c++程序在Windows中打开控制台?
How do I keep my Qt C++ program from opening a console in Windows?
我正在Qt Creator中制作应用程序,使用cmake和MinGW作为编译器。我已经看到这个问题被回答了其他人,但他们使用常规Qt项目与。pro文件,而我使用CMakeLists.txt文件。所以这些帖子对我没有任何帮助。
问题是我的应用程序在启动时打开了一个控制台,像往常一样,关闭这个控制台也会关闭应用程序。我想让应用程序不打开控制台,这样对于不需要任何调试信息之类的人来说,它更加用户友好。
默认情况下,与qmake相反,cmake在windows下使用启用的控制台窗口构建Qt应用程序(windows二进制文件可以使用不同的入口点-控制台窗口是其中之一)。
你可以通过在可执行文件上设置WIN32_EXECUTABLE
cmake属性来禁用控制台窗口的出现。
这可以通过设置add_executable
选项来实现,即
add_executable(myexe WIN32 ...)
或通过显式设置属性:
set_property(TARGET main PROPERTY WIN32_EXECUTABLE true)
当控制台窗口应该有条件地禁用时,使用set_property()
是有用的,例如:
if(CMAKE_BUILD_TYPE STREQUAL "Release")
set_property(TARGET main PROPERTY WIN32_EXECUTABLE true)
endif()
WIN32_EXECUTABLE
属性在非windows平台上编译时不起作用(参见CMAKE_WIN32_EXECUTABLE
)。
与WIN32
cmake变量一样,WIN32_EXECUTABLE
属性在编译win64可执行文件时也配置控制台窗口。
您很可能在CMakeLists.txt中有如下一行:
ADD_EXECUTABLE(exename ....)
,其中的点当然是进一步的参数。将其更改为:
ADD_EXECUTABLE(exename [WIN32] ...)
指定它是Win32应用程序而不是控制台应用程序。
或者,可以在CMAKE网站上找到"如果WIN32
被赋予属性WIN32_EXECUTABLE
将在创建的目标上设置。"当设置WIN32_EXECUTABLE时,它将"在windows上构建一个带有WinMain入口点的可执行文件"。
我也有同样的问题,但通过添加:
#CMakeLists.txt
# ... some text (like finding QT)
LINK_LIBRARIES(${QT_QTMAIN_LIBRARY})
# ... and then
ADD_EXECUTABLE(my_qt_project WIN32 ... )
如果我不使用LINK_LIBRARIES(${QT_QTMAIN_LIBRARY})
,我得到错误:
error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup
这是一个老问题,但无论如何,有一个更好的解决方案比所有其他张贴在这里:
CMAKE_POLICY(SET CMP0020 NEW)
添加这个将自动为您处理一切。如果你没有设置这个策略,CMake实际上应该输出一个警告,至少我是这样知道它的存在的。
使用Mingw构建,添加CMake命令:
set_target_properties(target_name PROPERTIES LINK_FLAGS "-mwindows")
将target_name
替换为目标的名称(add_executable的第一个参数)
- C++程序不会从 Windows 控制台运行
- 如何从Windows控制台调用.exe(C++)以在不同的目录(或任何目录)中创建文件夹?
- Windows7+:如何构建不需要任何额外/外部运行时库的C++ Windows 控制台应用程序?
- Windows 控制台代码页 866
- 何时调用 Windows 控制台应用程序需要 CoInitialize
- 使用具有 UTF8 编码的源文件将 UTF8 符号打印到 Windows 控制台
- 打印到 Windows 控制台度数 (°) 和立方体符号 (³)
- 为什么我的Windows控制台关闭事件处理程序超时
- 子进程 c++ 的 Windows 控制台信号处理
- 处理运行的Windows控制台应用程序中的拖放文件
- Windows 控制台应用 (C++) 具有错误的退出代码
- 如何通过C++Windows控制台修改光标
- 如何将消息从一个 Windows 控制台应用程序发送到另一个应用程序
- 基于Windows控制台的游戏
- 这是否可以挂接子进程发送到 Windows 控制台的消息
- Windows 控制台应用在新控制台而不是同一控制台中打开
- 如何获取Windows控制台高度
- 调整 Windows 控制台和 MFC 静态库的大小
- 如何将国际字符发送到 Windows 控制台
- Qt:无法使用QProcess启动Windows控制台