Подтвердить что ты не робот

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

Я играл с Qt Creator 4.5 под Linux. Мое приложение очень хорошо подстраивается под Linux, но если я создаю в Windows, приложение всегда открывает консольное окно при запуске.

Могу ли я остановить это?

Я использую настройку MinGW по умолчанию, возможно, это связано. Если нужно, я могу построить с помощью Visual Studio, но я хотел бы понять, что происходит в первую очередь...

Изменить. Я просто создал простое тестовое графическое приложение с Qt Creator под Windows и не проявил этого. Такое поведение произошло из-за того, как проект был создан под Linux, или что-то, что делает мое приложение, которое вызывает появление окна консоли. Будет публиковать данные, когда я диагностирую его, если он поможет кому-то другому.

4b9b3361

Ответ 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(пример добавьте новую строку или пробел)
и компиляция
он работает нормально