C++ QtCreator在构建Windows应用程序时如何避免控制台窗口?

C++ QtCreator在构建Windows应用程序时如何避免控制台窗口?,c++,visual-studio,qt,cmake,windows-console,C++,Visual Studio,Qt,Cmake,Windows Console,我试图使用CMake、Qt和VisualStudio构建一个不显示控制台窗口的可执行文件 我找到了这个帖子和答案 但我想知道QtCreator如何构建一个不显示控制台窗口的可执行文件,而不显示此/ENTRY标志?为了避免在使用CMake和Visual Studio的Qt项目中出现控制台窗口,CMakeLists.txt中需要四个条目: 设置(QT\U USE\U QMAIN true) 包括(${QT\u USE\u FILE}) ${QT_图书馆} 添加WIN32以添加\u可执行文件 添加\u

我试图使用CMake、Qt和VisualStudio构建一个不显示控制台窗口的可执行文件

我找到了这个帖子和答案


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

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

  • 设置(QT\U USE\U QMAIN true)
  • 包括(${QT\u USE\u FILE})
  • ${QT_图书馆}
  • 添加WIN32以添加\u可执行文件
  • 添加\u可执行文件,如下所示:

         ADD_EXECUTABLE(YourProject WIN32
               ...stuff...
         )
    
    对于VisualStudio,所有四个步骤都是必需的。对于MinGW,第4步似乎足够了。步骤1必须在步骤2之前进行

    这些步骤的作用是什么

    QT_USE_QMAIN在QT源中的
    include/QtGui/qwindowdefs.h
    中定义。令人惊讶的是,它不做其他事情,但:

    #if defined(QT_NEEDS_QMAIN)
    #define main qMain
    #endif
    
    使用此Qt定义自己的入口点。当然,这需要在某处定义qMain。因此,有必要包括一个额外的库,称为QtMain.lib

    步骤2是查找库的常用方法。在本例中,它包括:path/cmake-2.8/Modules/UseQt4.cmake(Qt4)

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

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


    这样做的好处是,在MinGW下,步骤1-3可能不是必需的,但也不会造成伤害。因此,没有必要区分VisualStudio和MinGW。然而,我只测试了Qt4。Qt5可能有所不同。

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

  • 设置(QT\U USE\U QMAIN true)
  • 包括(${QT\u USE\u FILE})
  • ${QT_图书馆}
  • 添加WIN32以添加\u可执行文件
  • 添加\u可执行文件,如下所示:

         ADD_EXECUTABLE(YourProject WIN32
               ...stuff...
         )
    
    对于VisualStudio,所有四个步骤都是必需的。对于MinGW,第4步似乎足够了。步骤1必须在步骤2之前进行

    这些步骤的作用是什么

    QT_USE_QMAIN在QT源中的
    include/QtGui/qwindowdefs.h
    中定义。令人惊讶的是,它不做其他事情,但:

    #if defined(QT_NEEDS_QMAIN)
    #define main qMain
    #endif
    
    使用此Qt定义自己的入口点。当然,这需要在某处定义qMain。因此,有必要包括一个额外的库,称为QtMain.lib

    步骤2是查找库的常用方法。在本例中,它包括:path/cmake-2.8/Modules/UseQt4.cmake(Qt4)

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

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


    这样做的好处是,在MinGW下,步骤1-3可能不是必需的,但也不会造成伤害。因此,没有必要区分VisualStudio和MinGW。然而,我只测试了Qt4。Qt5可能会有所不同。

    我不知道你的问题到底是什么。当您从资源管理器启动控制台时,同一个二进制文件是否会打开控制台,而当您在QtCreator中启动控制台时,它不会打开控制台?原因是QtCreator在其自己的控制台(作为应用程序输出窗口包含在GUI中)中启动它。就像你自己用cmd打开一个控制台并从那里启动它一样。我的问题是,使用qt creator的二进制构建在通过资源管理器运行时如何不打开控制台,因为它在链接应用程序时不提供/entry标志。我不知道你真正的问题是什么。当您从资源管理器启动控制台时,同一个二进制文件是否会打开控制台,而当您在QtCreator中启动控制台时,它不会打开控制台?原因是QtCreator在其自己的控制台(作为应用程序输出窗口包含在GUI中)中启动它。就像你自己用cmd打开一个控制台并从那里启动它一样。我的问题是,带qt creator的二进制构建在通过资源管理器运行时如何不打开控制台,因为它在链接应用程序时不提供/entry标志。只是这不能解决问题,因为入口点仍然是winmain而不是简单的,解决了我的问题。我用它编译的程序不再显示任何控制台窗口。但我不使用Visual Studio,而是使用MinGW。不知道这是否有区别。@drescherjm,这个变量究竟来自哪里?我搜索谷歌:一个独特的打击。只说“使用此变量”。搜索厨具:没有。如果这真的解决了McLeary的问题,你应该做出正确的回答。似乎很少见,我找到了。在Qt源代码中:
    include/QtGui/qwindowdefs.h:#如果已定义(Qt_需要_QMAIN)
    。正如我所说:如果这真的有效,它需要一个好的答案。关于这个定义的文档非常少。我上周不得不解决同样的问题。我模模糊糊地记得QTMAIN是用来解决main链接的,所以我在谷歌上搜索了一下,这让我在我的CmakeList中启用了QT_USE_QMAIN。TXT只是这不能解决问题,因为入口点仍然是winmain而不是普通的main。解决了我的问题。我用它编译的程序不再显示任何控制台窗口。但我不使用Visual Studio,而是使用MinGW。不知道这是否有区别。@drescherjm,这个变量究竟来自哪里?我搜索谷歌:一个独特的打击。只说“使用此变量”。搜索厨具:没有。如果这真的解决了McLeary的问题,你应该做出正确的回答。似乎很少见,我找到了。在Qt源代码中:
    include/QtGui/qwindowdefs.h:#如果已定义(Qt_需要_QMAIN)
    。正如我所说:如果这真的有效,它需要一个好的答案。关于这个定义的文档非常少。我上周不得不解决同样的问题。我模模糊糊地记得,QTMAIN是解决main链接问题所必需的,所以我在谷歌上搜索,这让我在CMakeLists.txt中启用了QT_USE_QMAIN