Pourquoi mon application Qt 4.5 ouvrir une fenêtre de console sous Windows?
-
09-09-2019 - |
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.
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
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