Почему мое приложение Qt 4.5 открывает окно консоли под Windows?

Я обнаружил проблему после дальнейшего тестирования.

Я проблема не в событиях с кнопками, а с блокировкой формы после выбора из раскрывающегося списка.

Я еще не обнаружил, почему блокировки формы после выпадающего списка выбраны (у него нет событий, но есть привязка к ним, поэтому есть некоторые возможные причины).

Спасибо вам за вашу помощь!

30
задан ymoreau 16 August 2017 в 14:58
поделиться

6 ответов

The short answer is that including the Qt testlib causes the console to appear. Removing it makes it go away.

To explain further, if your .pro file adds testlib to QT, e.g.

QT += sql \
    webkit \
    network \
    testlib

then the final link step is carried out with a line like this

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

We've wound up using the console subsystem! I presume using testlib forces this to happen so that the test output has somewhere to go.

If we now edit the .pro file and remove the reference to testlib and rebuild, we get a link step like this

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! subsystem is windows, no more console window.

17
ответ дан 27 November 2019 в 22:17
поделиться

Похоже, настройки компоновщика установлены для консольного приложения. Вы можете попробовать настроить компоновщик на использование параметра / subsystem: windows. Опция для консольных приложений - / subsystem: console. Если вы строите свой проект в Visual Studio, создайте проект Win32. Не создавайте консольное приложение Win32. Параметр для настройки подсистемы в Visual Studio находится в разделе «Параметры проекта» -> «Линкер» -> «Система» -> «Подсистема». Выберите Windows (/ subsystem: windows).

Я посмотрел, как это сделать с MinGW / gcc. В интерактивных документах для gcc показаны различные варианты целей Windows. Как и другие заявили, вариант, который вы ищете, -mwindows. Опция -mwindows создает оконное приложение. Похоже, что ваш текущий параметр -mconsole. Опция -mconsole создает консольное приложение. Это опция компоновщика. Я не знаком с Qt Creator, но полагаю, что он имеет аналогичный способ просмотра настроек проекта, как Visual Studio.

3
ответ дан 27 November 2019 в 22:17
поделиться

Вы хотите убедиться, что указан ключ -mwindows.

Редактировать:

или можете зайти в ваш make-файл и добавить его к своим флагам компоновщика:

-Wl,-subsystem,windows
8
ответ дан 27 November 2019 в 22:17
поделиться

По умолчанию компоновщик предполагает, что вам нужно консольное приложение.

Исправление заключается в добавлении «-mwindows» в список аргументов вашего компилятора, и это также незаметно добавит необходимые библиотеки (-lkernel32, -lgdi32 и т. Д.). Вам, вероятно, потребуется перейти от main () к WinMain () в качестве точки входа.

RE: ваш Edit: система сборки Qt использует файлы «spec» для добавления переменных, вы можете найти их в $ QTDIR / Qt / mkspecs. Когда вы создаете новое приложение Windows в QCreator, оно устанавливает для спецификации по умолчанию «win32-g ++», которая автоматически устанавливает правильные переменные (приложение для Windows, флаги компоновщика и т. Д.).

Когда вы создавали проект под Linux, он использовал другую спецификацию, и это вызвало вашу проблему. Вы можете увидеть текущую спецификацию в файле "yourproject.pro.user".

1
ответ дан 27 November 2019 в 22:17
поделиться

Убедитесь, что ваш .pro-файл не добавляет консоль в переменную CONFIG . Вы можете сделать это, добавив

CONFIG -= console

где-нибудь в конце вашего .pro-файла. Если CONFIG содержит консоль , окно появляется каждый раз, когда вы запускаете программу, и это также используется при выводе отладочной информации. Таким образом, добавление консоли может быть полезно при отладке программы. В противном случае вам потребуется использовать такие инструменты, как DebugView , чтобы показать выходные данные вызовов qDebug () .

4
ответ дан 27 November 2019 в 22:17
поделиться

Qt / 2009.05 / QT / MKSPECS / Win32-G ++
Редактировать файл qmake.conf
модифицировать строку
Qmake_lflags_console = -wl, -subsyetem, консоль
к
Qmake_lflags_console = -wl, -subsyetem, windows

и изменить ваш ???. Pro файл (пример Добавить новую строку или пространство)
и компиляция
работает нормально

0
ответ дан 27 November 2019 в 22:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: