Question

J'ai joué avec Qt Creator 4.5 sous Linux. Mon application construit très bien sous Linux, mais si je construis dans Windows, l'application ouvre toujours une fenêtre de la console au démarrage.

Puis-je arrêter de faire ça?

Je construis en utilisant la configuration par défaut MinGW, peut-être est lié. Si besoin, je peux construire avec Visual Studio, mais je voudrais comprendre ce qui se passe d'abord ...

Modifier : Je viens de créer une application simple GUI test avec Qt Creator sous Windows et il n'a pas ce comportement. Soit ce comportement a eu lieu en raison de la façon dont le projet a été créé sous linux, ou il y a quelque chose que mon application ne qui provoque la fenêtre de la console apparaisse. Signalera détails quand je poser un diagnostic dans le cas où il aide quelqu'un d'autre.

Était-ce utile?

La solution

La réponse courte est que l'inclusion de la Qt TestLib, la console apparaît. L'enlever fait disparaître.

Pour expliquer davantage, si votre fichier .pro ajoute TestLib à QT, par exemple.

QT += sql \
    webkit \
    network \
    testlib

alors l'étape de liaison finale est réalisée avec une ligne comme ceci

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

Nous avons redescendu à l'aide du sous-système de la console! Je suppose que l'utilisation des forces de TestLib que cela se produise pour que la sortie de test a un endroit où aller.

Si nous éditons maintenant le fichier .pro et supprimer la référence à TestLib et reconstruire, nous obtenons une étape de lien comme

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! sous-système est Windows, plus la fenêtre de la console.

Autres conseils

Je pense que ce n'est pas une solution pour cette réponse spécifique (en plus il est 4 ans plus tard), mais je pense que beaucoup de gens débarquant dans ce fil seront à la recherche de ce paramètre:

Projets> Construire et exécuter> Exécuter Paramètres> Exécuter> [x] Run dans le terminal

De-sélectionner et exécuter votre interface utilisateur de QtCreator sans fenêtre de terminal supplémentaire. Borne de sortie sera alors intégré dans l'IDE.

Vous voulez vous assurer que le commutateur -mwindows est fourni.

Modifier

Vous pouvez aller dans votre makefile et l'ajouter à vos drapeaux de l'éditeur de liens:

-Wl,-subsystem,windows

Pour ceux qui ont ce problème en utilisant CMake, j'ai trouvé la vraie solution . Vérifié par moi-même.

En bref, vous devez ajouter WIN32 à vos déclarations add_executable():

add_executable(GuiApplication WIN32 src/main.cpp)

Assurez-vous que votre fichier .pro ne pas ajouter à la console CONFIG variable. Vous pouvez le faire en ajoutant

CONFIG -= console

quelque part à la fin de votre fichier .pro. Si CONFIG contient console une fenêtre apparaît chaque fois que vous démarrez le programme, ce qui est également utilisé lors de l'impression de sortie de débogage. Ainsi, l'ajout console peut être utile lors du débogage d'un programme. Sinon, vous aurez besoin d'utiliser des outils comme DebugView pour montrer la sortie des appels qDebug().

On dirait que vos paramètres de liaison sont définis pour une application de la console. Vous pouvez essayer de définir l'éditeur de liens pour utiliser le / sous-système: Windows option. L'option pour les applications de la console est / sous-système: console. Si vous construisez votre projet dans Visual Studio, créez un projet Win32. Ne pas créer une application console Win32. L'option sous Visual Studio pour le réglage du sous-système est sous projet Paramètres-> Linker-> Système-> Sous-système. Sélectionnez Windows (/ sous-système: Windows).

Je pris un coup d'œil sur la façon de le faire avec MinGW / gcc. La documentation en ligne pour gcc montre les différents options pour cibles Windows. Comme d'autres l'ont dit, l'option que vous recherchez est -mwindows. L'option -mwindows crée une application fenêtré. Il semble que votre réglage actuel est -mconsole. Le -mconsole option produit une application console. Ceci est une option de liaison. Je ne suis pas familier avec Qt Creator, mais je devine qu'il a une façon similaire pour afficher les paramètres du projet comme Visual Studio a.

J'utilise CMake au lieu de qmake. J'ai utilisé sertis (CMAKE_CXX_FLAGS "-mwindows") semble que QMAKE_CXXFLAGS + = - mwindows dans votre fichier .pro ferait la même chose.

Aller à: Projects --> Run et décocher case à cocher Run in terminal

Par défaut l'éditeur de liens suppose que vous voulez une application console.

Le correctif est d'ajouter « -mwindows » à la liste des arguments de votre compilateur, et cela ajoutera également les bibliothèques invisiblement nécessaires (-lkernel32, -lgdi32, etc.). Vous aurez probablement besoin de changer le point d'entrée de la principale () à WinMain ().

RE: Edit: Qt construire système utilise des fichiers "spécifications" pour ajouter des variables, vous pouvez les trouver dans $ QTDIR / qt / mkspecs. Lorsque vous créez une nouvelle application Windows dans QCreator, il définit la spécification par défaut « win32-g ++ », qui définit automatiquement les variables correctes (app fenêtres, drapeaux de l'éditeur de liens, etc.).

Quand vous avez fait le projet sous Linux, il a utilisé une autre spécification et qui a causé votre problème. Vous pouvez voir la spécification actuelle dans le fichier « yourproject.pro.user ».

Qt / 2009,05 / qt / mkspecs / win32-g ++
modifier fichier qmake.conf
modifier la ligne
QMAKE_LFLAGS_CONSOLE = -Wl, -subsyetem, console
à
QMAKE_LFLAGS_CONSOLE = -Wl, -subsyetem, fenêtres

et modifier votre ???. Fichier pro (par exemple ajouter une nouvelle ligne ou un espace)
et la compilation
travail `s ok

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top