关于c ++:QtCreator在构建Windows应用程序时如何能够避开控制台窗口?

How QtCreator is able to avoid the console window when building a Windows application?

我试图使用不显示控制台窗口的CMake,Qt和Visual Studio构建可执行文件。

我发现这篇文章和这个答案

1
set(CMAKE_EXE_LINKER_FLAGS"${CMAKE_EXE_LINKER_FLAGS} /ENTRY:mainCRTStartup")

但我想知道QtCreator如何能够构建一个没有此/ ENTRY标志的可执行文件但不显示控制台窗口?


要避免使用CMake和Visual Studio的Qt项目中的控制台窗口,CMakeLists.txt中的四个条目是必需的:

  • SET(QT_USE_QMAIN为true)
  • 包括:($ {} QT_USE_FILE)
  • $ {} QT_LIBARIES
  • 将WIN32添加到ADD_EXECUTABLE
  • ADD_EXECUTABLE看起来像这样:

    1
    2
    3
         ADD_EXECUTABLE(YourProject WIN32
               ...stuff...
         )

    对于Visual Studio,所有四个步骤都是必需的。对于MinGW,步骤4似乎就足够了。步骤1必须在步骤2之前。

    这些步骤有什么作用?

    QT_USE_QMAIN在Qt源中的include/QtGui/qwindowdefs.h中定义。令人惊讶的是它没有别的,但是:

    1
    2
    3
    #if defined(QT_NEEDS_QMAIN)
    #define main qMain
    #endif

    有了这个Qt定义了自己的入口点。当然,这需要在某处定义qMain。因此,有必要包含一个额外的库,称为QtMain.lib。

    第2步是查找库的常用CMake方法。在这种情况下,它包括:path / cmake-2.8 / Modules / UseQt4.cmake(Qt4)。

    第3步实际链接找到的QtMain.lib。

    步骤4使Windows使用/ subsystem:windows而不是/ subsystem:console

    关于这个的好处是,在MinGW下可能没有必要采取步骤1-3,但也不要伤害。因此无需区分Visual Studio和MinGW。但是,我只测试了Qt4。 Qt5可能有所不同。