Domanda

Ho giocato in giro con Qt Creator 4.5 sotto Linux.La mia domanda costruisce bene sotto Linux, ma se devo costruire in Windows, l'app si apre sempre una finestra di console all'avvio.

Posso smettere di fare che?

Sto costruendo utilizzando il valore predefinito di installazione di MinGW, forse, che è correlato.Se necessario posso costruire con Visual Studio, ma mi piacerebbe capire cosa succede prima...

Modifica:Ho appena creato un semplice test applicazione GUI con Qt Creator sotto Windows e non presentano questo comportamento.Questo comportamento si verifica a causa del modo in cui il progetto è stato creato sotto linux, o c'è qualcosa che la mia applicazione non fa che provoca la finestra della console per apparire.Daremo i dettagli quando ho diagnosticare in caso aiuta a qualcun altro.

È stato utile?

Soluzione

La risposta breve è che tra le Qt testlib cause della console di apparire.La rimozione di esso lo fa andare via.

Per spiegare ulteriormente, se il vostro .pro file aggiunge testlib a QT, ad esempio

QT += sql \
    webkit \
    network \
    testlib

quindi il collegamento finale fase viene condotta con una riga come questa

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

Abbiamo ferita utilizzando la console!Presumo che utilizza testlib forze che questo accada in modo che l'uscita di test ha un posto dove andare.

Se ora modificare il .pro file e rimuovere il riferimento al testlib e ricostruire, si ottiene un link passo come questo

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!sottosistema di windows, non più la finestra di console.

Altri suggerimenti

Credo che questa non è una soluzione per questa risposta specifica (inoltre è 4 anni più tardi), ma penso che molte persone che atterrano in questa discussione sarà alla ricerca di questa impostazione:

Progetti> Build and Run> Impostazioni corsa> Esegui> [x] Esegui nel terminale

De-selezionarlo ed eseguire la vostra interfaccia grafica da QtCreator senza una finestra Terminale in più. Uscita terminale sarà poi integrato nel IDE.

Si vuole assicurarsi che l'interruttore -mwindows è fornito.

Modifica

In alternativa, si può andare in makefile e aggiungere questo ai vostri bandiere linker:

-Wl,-subsystem,windows

Per coloro che hanno questo problema usando CMake, ho trovato la vera soluzione qui . Verificato da me.

In breve, è necessario aggiungere WIN32 per le sue dichiarazioni add_executable():

add_executable(GuiApplication WIN32 src/main.cpp)

Assicurati che il file .pro non aggiunge console al CONFIG variabile. Si può fare questo con l'aggiunta di

CONFIG -= console

da qualche parte alla fine del file .pro. Se CONFIG contiene console una finestra si apre ogni volta che si avvia il programma, e questo viene utilizzato anche per la stampa di output di debug. Pertanto, aggiungendo console può essere utile quando debug di un programma. In caso contrario, avresti bisogno di utilizzare strumenti come DebugView per mostrare l'uscita delle chiamate qDebug().

Sembra che le impostazioni del linker sono impostate per una console app. Si potrebbe provare a impostare il linker di utilizzare la / sottosistema: opzione di Windows. L'opzione per le applicazioni console è / sottosistema: console. Se si genera il progetto in Visual Studio, creare un progetto Win32. Non creare una console Win32 App. L'opzione in Visual Studio per l'impostazione del sottosistema è in fase di progetto Impostazioni-> Linker-> Sistema-> sottosistema. Selezionare Windows (/ sottosistema: finestre).

Ho preso uno sguardo su come fare questo con MinGW / GCC. La documentazione online per gcc mostra i diversi opzioni per gli obiettivi di Windows. Come altri hanno dichiarato, l'opzione che stai cercando è -mwindows. I -mwindows opzione consente di creare un'applicazione finestra. Sembra che l'impostazione corrente è -mconsole. L'opzione -mconsole produce una console app. Questa è un'opzione del linker. Non ho dimestichezza con Qt Creator, ma sto cercando di indovinare che ha un modo simile per visualizzare le impostazioni di progetto come Visual Studio ha.

Io uso CMake invece di qmake. Ho usato SET (CMAKE_CXX_FLAGS "-mwindows") Sembra come se QMAKE_CXXFLAGS + = - mwindows nel file .pro avrebbe fatto lo stesso.

Vai a: casella di controllo Projects --> Run deselezionare Run in terminal e

Per impostazione predefinita il linker presuppone che si desidera un'applicazione console.

La correzione è di aggiungere "-mwindows" per lista degli argomenti del compilatore, e questo sarà anche invisibilmente aggiungere le librerie necessarie (-lkernel32, -lgdi32, etc.). Avrete probabilmente bisogno di cambiare da main () a WinMain () come il punto di ingresso.

RE: il vostro Edit: il Qt costruire sistema utilizza file "spec" per aggiungere le variabili, si può trovare in $ QTDIR / Qt / mkspecs. Quando si crea una nuova applicazione di Windows in QCreator, imposta le specifiche di default a "win32-g ++", che imposta automaticamente le variabili corrette (finestre app, bandiere linker, ecc).

Quando hai fatto il progetto sotto Linux, è utilizzato un altro spec e che ha causato il problema. Si può vedere la specifica corrente nel file "yourproject.pro.user".

Qt / 2009,05 / qt / mkspecs / win32-g ++
Modifica file qmake.conf
modificare la linea
QMAKE_LFLAGS_CONSOLE = -Wl, -subsyetem, console
a
QMAKE_LFLAGS_CONSOLE = -Wl, -subsyetem, finestre

e modificare il ???. File di pro (ad esempio aggiungere nuova riga o spazio)
e la compilazione
`s lavorando ok

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top