Pergunta

Eu fui brincar com o Qt Creator 4.5 no Linux. Meu aplicativo cria muito bem no Linux, mas se eu construir no Windows, o aplicativo sempre abre uma janela de console na inicialização.

Posso pará-lo fazendo isso?

Estou construindo usando a configuração padrão MinGW, talvez, que está relacionado. Se for necessário posso criar com Visual Studio, mas eu gostaria de entender o que está acontecendo em primeiro lugar ...

Editar : Acabei de criar um aplicativo simples teste de GUI com o Qt Creator no Windows e não apresentam esse comportamento. Ou esse comportamento ocorreu devido à forma como o projeto foi criado com o Linux, ou há algo que meu aplicativo faz o que faz com que a janela do console para aparecer. Irá publicar detalhes quando eu diagnosticá-la no caso de ajuda de outra pessoa.

Foi útil?

Solução

A resposta curta é que a inclusão do TESTLIB Qt faz com que o console para aparecer. Removê-lo torna-lo ir embora.

Para explicar melhor, se o arquivo .pro acrescenta TESTLIB para QT, por exemplo.

QT += sql \
    webkit \
    network \
    testlib

então o passo elo final é realizada com uma linha 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

Nós acabou usando o subsistema de console! Presumo usando forças TestLib que isso aconteça para que a saída de teste tem um lugar para ir.

Se agora editar o arquivo .pro e remover a referência a TESTLIB e reconstruir, obtemos um passo link 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

Yay! subsistema é janelas, não mais a janela do console.

Outras dicas

Eu acho que isso não é uma solução para esta resposta específica (para além de que é 4 anos mais tarde), mas eu acho que muitas pessoas que aterram neste segmento vai estar olhando para essa configuração:

Projectos> Construir e Executar> Executar Configurações> Run> [x] Correr no Terminal

De-selecioná-lo e executar o seu GUI de QtCreator sem uma janela Terminal extra. saída terminal será então incorporado no IDE.

Você vai querer certificar-se da -mwindows interruptor é fornecido.

Editar:

Como alternativa, você pode ir em seu makefile e adicione aos seus sinalizadores de vinculador:

-Wl,-subsystem,windows

Para aqueles que têm esse problema usando CMake, eu encontrei a solução real aqui . Verificada por mim mesmo.

Em suma, você precisa adicionar WIN32 às suas declarações add_executable():

add_executable(GuiApplication WIN32 src/main.cpp)

Verifique se o seu arquivo .pro não adiciona console ao CONFIG variável. Você pode fazer isso adicionando

CONFIG -= console

em algum lugar no final do seu arquivo .pro. Se CONFIG contém console uma janela aparece cada vez que você iniciar o programa, e isso também é usado ao imprimir saída de depuração. Assim, acrescentando console pode ser útil ao depurar um programa. Caso contrário, você precisa usar ferramentas como DebugView para mostrar a saída das chamadas qDebug().

Parece que as suas definições vinculador estão definidas para um aplicativo console. Você pode tentar definir o vinculador para usar o subsistema /: opção de janelas. A opção para aplicativos de console é / subsistema: console. Se você construir seu projeto no Visual Studio, crie um projeto Win32. Não crie um Win32 Console App. A opção em Visual Studio para definir o subsistema está sob Projeto Configurações> Linker-> System-> subsistema. Selecione Windows (/ subsistema: windows).

Eu dei uma olhada em como fazer isso com MinGW / gcc. Os documentos online para gcc mostra as diferentes opções para alvos Windows. Como outros têm afirmado, a opção que você está procurando é -mwindows. Os -mwindows opção cria um aplicativo de janela. Parece que sua configuração atual é -mconsole. O -mconsole opção produz um aplicativo de console. Esta é uma opção do vinculador. Eu não estou familiarizado com o Qt Creator, mas eu estou supondo que tem uma forma semelhante a configurações do projeto vista como o Visual Studio tem.

Eu uso cmake vez de qmake. Eu jogo usado (CMAKE_CXX_FLAGS "-mwindows") Parece que QMAKE_CXXFLAGS + = - mwindows no seu arquivo .pro faria o mesmo.

Vá para: Projects --> Run e desmarque Run in terminal caixa

Por padrão, o vinculador pressupõe que você quiser um aplicativo de console.

A correção é adicionar "-mwindows" a lista de argumentos de seu compilador, e isso também vai invisivelmente adicionar as bibliotecas necessárias (-lkernel32, -lgdi32, etc.). Você provavelmente vai precisar de mudar de main () para WinMain () como o ponto de entrada.

RE: sua edição: os usos sistema de compilação do Qt arquivos "spec" para adicionar variáveis, você pode encontrá-los em $ QTDIR / Qt / mkspecs. Quando você cria um novo aplicativo do Windows no QCreator, ele define a especificação padrão para "win32-g ++", que define automaticamente as variáveis ??corretas (janelas de aplicativos, bandeiras vinculador, etc.).

Quando você fez o projeto sob o Linux, ele usou outra especificação e que causou o problema. Você pode ver a especificação atual no arquivo "yourproject.pro.user".

Qt / 2009,05 / qt / mkspecs / win32-g ++
editar arquivo qmake.conf
linha Modificar
QMAKE_LFLAGS_CONSOLE = -Wl, -subsyetem, consola
para
QMAKE_LFLAGS_CONSOLE = -Wl, -subsyetem, janelas

e modificar seu ???. Arquivo pro (exemplo adicionar nova linha ou espaço)
e compilar
it`s ok trabalhando

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top