Я обнаружил проблему после дальнейшего тестирования.
Я проблема не в событиях с кнопками, а с блокировкой формы после выбора из раскрывающегося списка.
Я еще не обнаружил, почему блокировки формы после выпадающего списка выбраны (у него нет событий, но есть привязка к ним, поэтому есть некоторые возможные причины).
Спасибо вам за вашу помощь!
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.
Похоже, настройки компоновщика установлены для консольного приложения. Вы можете попробовать настроить компоновщик на использование параметра / 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.
Вы хотите убедиться, что указан ключ -mwindows.
Редактировать:
или можете зайти в ваш make-файл и добавить его к своим флагам компоновщика:
-Wl,-subsystem,windows
По умолчанию компоновщик предполагает, что вам нужно консольное приложение.
Исправление заключается в добавлении «-mwindows» в список аргументов вашего компилятора, и это также незаметно добавит необходимые библиотеки (-lkernel32, -lgdi32 и т. Д.). Вам, вероятно, потребуется перейти от main () к WinMain () в качестве точки входа.
RE: ваш Edit: система сборки Qt использует файлы «spec» для добавления переменных, вы можете найти их в $ QTDIR / Qt / mkspecs. Когда вы создаете новое приложение Windows в QCreator, оно устанавливает для спецификации по умолчанию «win32-g ++», которая автоматически устанавливает правильные переменные (приложение для Windows, флаги компоновщика и т. Д.).
Когда вы создавали проект под Linux, он использовал другую спецификацию, и это вызвало вашу проблему. Вы можете увидеть текущую спецификацию в файле "yourproject.pro.user".
Убедитесь, что ваш .pro-файл не добавляет консоль
в переменную CONFIG
. Вы можете сделать это, добавив
CONFIG -= console
где-нибудь в конце вашего .pro-файла. Если CONFIG
содержит консоль
, окно появляется каждый раз, когда вы запускаете программу, и это также используется при выводе отладочной информации. Таким образом, добавление консоли
может быть полезно при отладке программы. В противном случае вам потребуется использовать такие инструменты, как DebugView , чтобы показать выходные данные вызовов qDebug ()
.
Qt / 2009.05 / QT / MKSPECS / Win32-G ++
Редактировать файл qmake.conf
модифицировать строку
Qmake_lflags_console = -wl, -subsyetem, консоль
к
Qmake_lflags_console = -wl, -subsyetem, windows
и изменить ваш ???. Pro файл (пример Добавить новую строку или пространство)
и компиляция
работает нормально