Why does my Qt 4.5 app open a console window under Windows? Why does my Qt 4.5 app open a console window under Windows? windows windows

Why does my Qt 4.5 app open a console window under Windows?


For those who have this issue using CMake under Windows (see Amoo's comment), here's a solution here.

In short, you need to add WIN32 to your add_executable() statements:

add_executable(GuiApplication WIN32 src/main.cpp)

For further details, see the CMake documentation on add_executable and WIN32_EXECUTABLE.


The short answer is that including the Qt testlib causes the console to appear. Removing it makes it go away.

To explain further, if your .pro file adds testlib to QT, e.g.

QT += sql \    webkit \    network \    testlib

then the final link step is carried out with a line like this

g++ -enable-stdcall-fixup    -Wl,-enable-auto-import    -Wl,-enable-runtime-pseudo-reloc    -mthreads    -Wl    -Wl,-subsystem,console    -o debug\MyApp.exe object_script.MyApp.Debug     -L"c:\Qt\2009.01\qt\lib"     -lglu32 -lgdi32 -luser32 -lQtWebKitd4 -lQtTestd4    -lQtSqld4 -lQtGuid4 -lQtNetworkd4 -lQtCored

We've wound up using the console subsystem! I presume using testlib forces this to happen so that the test output has somewhere to go.

If we now edit the .pro file and remove the reference to testlib and rebuild, we get a link step like this

g++ -enable-stdcall-fixup    -Wl,-enable-auto-import    -Wl,-enable-runtime-pseudo-reloc    -mthreads    -Wl    -Wl,-subsystem,windows    -o debug\Ammotin.exe object_script.Ammotin.Debug     -L"c:\Qt\2009.01\qt\lib"    -lglu32 -lgdi32 -luser32 -lmingw32 -lqtmaind -lQtWebKitd4    -lQtSqld4  -lQtGuid4 -lQtNetworkd4 -lQtCored4

Yay! subsystem is windows, no more console window.


I think that this is not a solution for this specific answer (besides it is 4 years later),but I think that many people landing in this thread will be looking for this setting:

Projects > Build and Run > Run Settings > Run > [x] Run in terminal

De-select it and run your GUI from QtCreator without an extra Terminal window. Terminal output will be then embedded in the IDE.