Por que o meu Qt 4.5 aplicativo abrir uma janela do console no Windows?
-
09-09-2019 - |
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.
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 ??p>
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