Почему приложение Qt 4.5 открывает консольное окно под Windows?
Я играл с Qt Creator 4.5 под Linux. Мое приложение очень хорошо подстраивается под Linux, но если я создаю в Windows, приложение всегда открывает консольное окно при запуске.
Могу ли я остановить это?
Я использую настройку MinGW по умолчанию, возможно, это связано. Если нужно, я могу построить с помощью Visual Studio, но я хотел бы понять, что происходит в первую очередь...
Изменить. Я просто создал простое тестовое графическое приложение с Qt Creator под Windows и не проявил этого. Такое поведение произошло из-за того, как проект был создан под Linux, или что-то, что делает мое приложение, которое вызывает появление окна консоли. Будет публиковать данные, когда я диагностирую его, если он поможет кому-то другому.
Ответы
Ответ 1
Короткий ответ заключается в том, что включение Qt testlib вызывает появление консоли. Удаление его заставляет его уйти.
Далее, если ваш .pro файл добавляет testlib в QT, например.
QT += sql \
webkit \
network \
testlib
то последний шаг ссылки выполняется с помощью строки, подобной этой
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
Мы закончили работу с консольной подсистемой! Я предполагаю, что использование testlib заставляет это происходить, чтобы тестовый выход куда-то уходил.
Если мы теперь отредактируем файл .pro и удалим ссылку на testlib и перестроим, мы получим такой шаг ссылки
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
Ура! Подсистема - это окна, больше не окно консоли.
Ответ 2
Я думаю, что это не решение для этого конкретного ответа (кроме того, это 4 года спустя),
но я думаю, что многие люди, приземляющиеся в этом потоке, будут искать этот параметр:
Проекты > Построение и запуск > Параметры запускa > Выполнить > [x] Запустить в терминале
Отмените его и запустите графический интерфейс из QtCreator без дополнительного окна терминала. Затем терминал будет встроен в среду IDE.
Ответ 3
Вам нужно убедиться, что предусмотрен переключатель -mwindows.
Edit:
В качестве альтернативы вы можете войти в свой файл makefile и добавить его в свои флагов компоновщика:
-Wl,-subsystem,windows
Ответ 4
Убедитесь, что ваш .pro файл не добавляет console
к переменной CONFIG
. Вы можете сделать это, добавив
CONFIG -= console
где-то в конце вашего .pro файла. Если CONFIG
содержит console
, окно появляется каждый раз, когда вы запускаете программу, и это также используется при печати вывода отладки. Таким образом, добавление console
может быть полезно при отладке программы. В противном случае вам нужно будет использовать такие инструменты, как DebugView, чтобы показать вывод вызовов qDebug()
.
Ответ 5
Похоже, ваши настройки компоновщика настроены для консольного приложения. Вы можете попробовать установить компоновщик для использования опции /subsystem: windows. Опция для консольных приложений - это/подсистема: консоль. Если вы создаете свой проект в Visual Studio, создайте проект Win32. Не создавайте консольное приложение Win32. Параметр в Visual Studio для настройки подсистемы находится в разделе "Настройки проекта" → "Linker- > System- > SubSystem". Выберите Windows (/подсистема: окна).
Я посмотрел, как это сделать с помощью MinGW/gcc. В онлайн-документах для gcc показаны различные параметры для целей Windows. Как и другие заявили, опция, которую вы ищете, это -mwindows. Опция -mwindows создает оконное приложение. Кажется, что ваша текущая настройка - mconsole. Параметр -mconsole создает консольное приложение. Это вариант компоновщика. Я не знаком с Qt Creator, но я предполагаю, что он имеет аналогичный способ просмотра настроек проекта, таких как Visual Studio.
Ответ 6
Я использую cmake вместо qmake. Я использовал set (CMAKE_CXX_FLAGS "-mwindows" )
кажется
QMAKE_CXXFLAGS + = - mwindows
в вашем файле .pro будет делать то же самое.
Ответ 7
Для тех, кто приходит сюда через поисковые системы, такие как я, я нашел реальное решение здесь. Проверено мной.
Короче говоря, вам нужно добавить "WIN32" к вашим операторам add_executable().
add_executable(
GuiApplication
WIN32
src/main.cpp
)
Ответ 8
Установите флажок Projects --> Run
и снимите флажок Run in terminal
Ответ 9
По умолчанию компоновщик предполагает, что вы хотите консольное приложение.
Исправление состоит в том, чтобы добавить "-mwindows" в список аргументов компилятора, и это также будет незаметно добавлять необходимые библиотеки (-lkernel32, -lgdi32 и т.д.). Вероятно, вам нужно будет перейти от main() к WinMain() в качестве точки входа.
RE: ваше Edit: система сборки Qt использует файлы "spec" для добавления переменных, вы можете найти их в $QTDIR/qt/mkspecs. Когда вы создаете новое приложение Windows в QCreator, оно устанавливает спецификацию по умолчанию "win32-g++", которая автоматически устанавливает правильные переменные (приложение Windows, флаги компоновщика и т.д.).
Когда вы создали проект под Linux, он использовал другую спецификацию и вызвал вашу проблему. Вы можете увидеть текущую спецификацию в файле "yourproject.pro.user".
Ответ 10
Qt/2009,05/Qt/mkspecs/win32-г ++
редактировать файл qmake.conf
изменить строку
QMAKE_LFLAGS_CONSOLE = -Wl, -способен, консоль
для изображения
QMAKE_LFLAGS_CONSOLE = -Wl, -subsyetem, windows
и измените свой файл .pro(пример добавьте новую строку или пробел)
и компиляция
он работает нормально