Как QtCreator может избежать появления окна консоли при создании приложения для Windows?

Я пытался создать исполняемый файл с использованием CMake, Qt и Visual Studio, который не показывает окно консоли.

Я нашел этот пост и этот ответ

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

Но мне было интересно, как QtCreator может создать исполняемый файл, который не показывает окно консоли без этого флага / ENTRY?

0

Решение

Чтобы избежать консольного окна в проекте Qt, который использует CMake и Visual Studio, необходимы четыре записи в CMakeLists.txt:

  1. SET (QT_USE_QMAIN true)
  2. ВКЛЮЧИТЬ ($ {QT_USE_FILE})
  3. $ {QT_LIBARIES}
  4. Добавить WIN32 в ADD_EXECUTABLE

ADD_EXECUTABLE выглядит тогда так:

     ADD_EXECUTABLE(YourProject WIN32
...stuff...
)

Для Visual Studio все четыре шага необходимы. Для MinGW шаг 4 представляется достаточным. Шаг 1 должен прийти перед шагом 2.

Что делают эти шаги?

QT_USE_QMAIN определен в include/QtGui/qwindowdefs.h в источниках Qt. Удивительно, но больше ничего не делает, но:

#if defined(QT_NEEDS_QMAIN)
#define main qMain
#endif

С этим Qt определяет свою собственную точку входа. Конечно, для этого нужно где-то определить qMain. Поэтому необходимо включить дополнительную библиотеку, которая называется QtMain.lib.

Шаг 2 — это обычный CMake-способ поиска библиотек. В этом случае он включает в себя: путь / cmake-2.8 / Modules / UseQt4.cmake (Qt4).

Шаг 3 фактически связывает найденный QtMain.lib.

Шаг 4 заставляет Windows использовать / subsystem: windows вместо / subsystem: console

Хорошая вещь об этом, то, что шаг 1-3, возможно, не необходим в MinGW, но также не повредит. Поэтому нет необходимости различать Visual Studio и MinGW. Однако я тестировал только с Qt4. Это может быть иначе для Qt5.

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]