Pregunta

He estado jugando con Qt Creator 4.5 en Linux.Mi aplicación se compila bien en Linux, pero si la compilo en Windows, la aplicación siempre abre una ventana de consola al inicio.

¿Puedo dejar de hacer eso?

Estoy construyendo usando la configuración predeterminada de MinGW, quizás eso esté relacionado.Si es necesario, puedo compilar con Visual Studio, pero primero me gustaría entender qué está sucediendo...

Editar:Acabo de crear una aplicación GUI de prueba simple con Qt Creator en Windows y no mostró este comportamiento.O este comportamiento se produjo debido a la forma en que se creó el proyecto en Linux, o hay algo que hace mi aplicación que hace que aparezca la ventana de la consola.Publicaré detalles cuando lo diagnostique en caso de que ayude a alguien más.

¿Fue útil?

Solución

La respuesta corta es que incluir Qt testlib hace que aparezca la consola.Quitarlo hace que desaparezca.

Para explicar más, si su archivo .pro agrega testlib a QT, p.

QT += sql \
    webkit \
    network \
    testlib

luego el paso final de enlace se realiza con una línea como esta

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

¡Terminamos usando el subsistema de consola!Supongo que el uso de testlib obliga a que esto suceda para que el resultado de la prueba tenga un lugar adonde ir.

Si ahora editamos el archivo .pro y eliminamos la referencia a testlib y lo reconstruimos, obtenemos un paso de enlace como este

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

¡Hurra!El subsistema es Windows, no más ventana de consola.

Otros consejos

Creo que esto no es una solución para esta respuesta específica (además de que es 4 años más tarde), pero creo que muchas personas que aterrizan en este hilo se busca para este ajuste:

Proyectos> Construir y Ejecutar> Configuración de carrera> Ejecutar> [x] Ejecutar en el terminal

De-seleccionar y ejecutar su interfaz gráfica de usuario de QtCreator sin una ventana de terminal adicional. será entonces incrustado salida Terminal en el IDE.

Usted tendrá que asegurarse de que se proporciona el interruptor -mwindows.

Editar

Como alternativa, se puede entrar en el makefile y añadir esto a sus banderas enlazador:

-Wl,-subsystem,windows

Para aquellos que tienen este problema usando CMake, he encontrado la solución real aquí . Verificado por mí mismo.

En resumen, es necesario agregar WIN32 a sus estados de cuenta add_executable():

add_executable(GuiApplication WIN32 src/main.cpp)

Asegúrese de que su archivo .pro no agregue console a la variable CONFIG.Puedes hacer esto agregando

CONFIG -= console

en algún lugar al final de su archivo .pro.Si CONFIG contiene console Aparece una ventana cada vez que inicia el programa, y ​​esto también se usa al imprimir la salida de depuración.Así, añadiendo console Puede resultar útil a la hora de depurar un programa.De lo contrario, necesitaría utilizar herramientas como Vista de depuración para mostrar la salida del qDebug() llamadas.

Parece que la configuración del vinculador se establecen para una aplicación de consola. Usted podría tratar de establecer el enlazador a utilizar el / subsistema: opción de ventanas. La opción para aplicaciones de consola es / subsistema: consola. Si usted construye su proyecto en Visual Studio, cree un Proyecto Win32. No cree una aplicación de consola Win32. La posibilidad prevista en Visual Studio para configurar el subsistema es el marco del Proyecto Configuración-> Linker-> Sistema-> subsistema. Seleccione Windows (/ subsistema: ventanas).

Me echó un vistazo a la manera de hacer esto con MinGW / gcc. Los documentos en línea para gcc muestra las diferentes opciones para objetivos Windows. Como otros han dicho, la opción que está buscando es -mwindows. Los -mwindows opción crea una aplicación de ventana. Parece que su configuración actual es -mconsole. La opción -mconsole produce una aplicación de consola. Se trata de una opción del vinculador. No estoy familiarizado con Qt Creator, pero supongo que tiene una forma similar a la vista la configuración del proyecto tiene como Visual Studio.

Yo uso cmake en lugar de qmake. Me utilizado set ( "-mwindows" CMAKE_CXX_FLAGS) Parece como si QMAKE_CXXFLAGS + = - mwindows en su archivo .pro haría lo mismo.

Ir a: Projects --> Run y casilla Run in terminal desmarque

Por defecto, el enlazador supone que desea una aplicación de consola.

La solución es añadir "-mwindows" a la lista de argumentos de su compilador, y esto también añadirá de forma invisible las bibliotecas necesarias (-lkernel32, -lgdi32, etc.). Es probable que tenga que cambiar desde main () a WinMain () como el punto de entrada.

RE: Tu edición: Qt construir sistema utiliza los archivos "spec" para añadir variables, se puede encontrar en $ QTDIR / qt / mkspecs. Cuando se crea una nueva aplicación de Windows en QCreator, establece las especificaciones de fábrica en "win32-g ++", que ajusta automáticamente las variables correctas (ventanas de aplicaciones, banderas de engarce, etc.).

Cuando se hizo el proyecto en Linux, se utiliza otra especificación y que causó el problema. Se puede ver la especificación actual en el archivo "yourproject.pro.user".

Qt / 2009.05 / qt / mkspecs / win32-g ++
editar archivos qmake.conf
modificar la línea
QMAKE_LFLAGS_CONSOLE = -Wl, -subsyetem, consola
a
QMAKE_LFLAGS_CONSOLE = -Wl, -subsyetem, ventanas

y modificar su ???. Archivo de pro (ejemplo añadir nueva línea o espacio)
y la compilación de
`s de trabajo bien

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top