Сбой приложения QT, когда мышь находится над кнопкой - PullRequest
0 голосов
/ 13 февраля 2019

Я постараюсь максимально коротко рассказать историю.Я статически скомпилировал QT 5.11.2, чтобы иметь возможность компилировать один исполняемый файл под окнами, следуя этому руководству: https://retifrav.github.io/blog/2018/02/17/build-qt-statically/

После многих испытаний, компиляции и тому подобного я смог войти в режим «выпуска» a .exe около 15 МБ.

Я скомпилировал его, используя разные версии MinGW с опцией "QTPLUGIN.imageformats = -" в проекте .pro, чтобы избежать ошибки -ltiff.Это странно, поскольку мое приложение не имеет функции обработки изображений ...

Мое приложение - простая и простая кнопка (событие не связано).

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что, когда мышь перемещается над кнопкой и она должна перейти из серого в светло-синий, колесо Windows вращается за секунду до того, как приложение вылетает с Segmentation fault.

Используя динамическую компиляцию, он работает хорошо и без сбоев.

После многих попыток я обнаружил, что по крайней мере другой объект QT падает так же, как RadioBox.CheckBox и Tool Button обрабатываются корректно при наведении мыши на событие.

Я пытался изменить свойства объекта, вызывающего сбой, копируя с рабочих объектов, но все равно вылетал!

Я в отчаянии!После кошмара статической компиляции я столкнулся с этой проблемой, и мне не помогло никакое прибегание к помощи.

Протестированные компиляторы:

MinGW 4.9.2 g++
MinGW 5.3 g++
MinGW 7.3 g++

Я также попытался удалить отладчик на всякий случай.

Любая помощь?

Я перехожу из Rad Studio в QT из-за известных проблем, которые находят больше проблем, чем решений.

1 Ответ

0 голосов
/ 17 февраля 2019

Я публикую это как ответ, потому что это слишком долго для комментария ...

Я установил qt с нуля.Я сделал это, начиная с репозитория qt git hub.Закончив, я добавил его в набор для своего qtcreator и пересобрал несколько старых проектов с графическим интерфейсом, которые у меня были, с помощью кнопок.Затем я взял exe-файлы (они были около 500 МБ, потому что я использовал отладочную конфигурацию) и запустил их на ПК, который никогда не видел Qt (портативный ноутбук), и две протестированные мной программы отлично работали с нажатиями кнопок и без сбоев.

Итак, вот список инструкций, которые я использовал (для windows 10), вы можете попробовать это с самого начала, чтобы посмотреть, поможет ли это:

1.Приготовление

В произвольном порядке:

  • установить клубничный perl (требуется при компиляции).Обратите внимание, что нормальный Perl не очень хорошо работает.
  • Получить источник qt:
    • git clone https://github.com/qt/qt5.git qt5
    • git checkout 5.12.1 (конкретная сборкавместо 5.12 последней версии)
    • git submodule update --init --recursive
    • git submodule foreach --recursive "git clean -dfx" && git clean -dfx (убедитесь, что репо чистое)
  • Загрузите и установите mingw64 (32-разрядную версию) из: https://sourceforge.net/projects/mingw-w64/. Я использовал параметры:
    • версия 7.3.0
    • Арка i686
    • Потоки posix
    • Исключение карлик
    • Build-rev 0
  • Длинные пути NTFS для Windows 10
    • Загрузите MediaCreationTool1809.exe отсюда https://www.microsoft.com/en-gb/software-download/windows10 и запустите его от имени администратора.
    • https://superuser.com/questions/1119883/windows-10-enable-ntfs-long-paths-policy-option-missing
      • После того, как вы установили шаг 1 (возможно, перезагрузку), у вас должна появиться кнопка «gpedit.msc» для окна, и вы увидите gpedit
      • Щелкните правой кнопкой мыши, запустите от имени администратора.Затем: Политика локального компьютера -> Конфигурация компьютера -> Административные шаблоны -> Система -> Файловая система -> Включить длинные пути Win32 (двойной щелчок)
      • . Там установите флажок включения и нажмите ОК.
  • Установить Python (требуется при установке make):

ПРИМЕЧАНИЕ: в папке mingw должен быть файл mingw-xx.bat, чтобы открыть среду приглашения cmd для gcc.Запустите это для всех приглашений cmd для выполнения следующих действий:

ПРИМЕЧАНИЕ: убедитесь, что вы отредактировали пути так, чтобы клубничный perl ... / bin был перед любым другим perl.Настройка должна выглядеть следующим образом:

    set PATH=D:\install\StrawberryPerl\perl\bin;%PATH%
    set PATH=D:\install\mingw-w64\i686-7.3.0-posix-dwarf\mingw32\bin;%PATH%
    set PATH=D:\install\Qt\qt5\qtbase\bin;%PATH%
    set PATH=D:\install\Qt\qt5\gnuwin32\bin;%PATH%

Где D:\install\Qt\qt5 - где находится мое gt-репо qt5.

2.Конфигурация

2.1.Static Config

  • Создайте папку на том же уровне, что и ../qt5/ репо с именем ../qt5-static-build/ (например) и перейдите в нее, затем выполните команду:
- ..\qt5\configure -debug -opensource -static -static-runtime -skip webengine -nomake examples -nomake tests -nomake tools -accessibility -no-sql-sqlite -no-opengl -platform win32-g++ -qt-zlib -qt-libpng -qt-libjpeg -confirm-license -prefix "C:\install\Qt\5.12.1-static"

2.2.Shared Lib Config

  • Создайте папку на том же уровне, что и ../qt5/ репо с именем ../qt5-build/ (например) и перейдите в нее, затем выполните команду:
..\qt5\configure -debug -opensource -skip webengine -nomake examples -nomake tests -nomake tools -accessibility -no-sql-sqlite -no-opengl -platform win32-g++ -qt-zlib -qt-libpng -qt-libjpeg -confirm-license -prefix "C:\install\Qt\5.12.1-sharedlib"

3.Компиляция и установка

В любом случае, вы настроили qt (статическую или нет), эта часть одна и та же, в основном выполните:

mingw32-make -j8
mingw32-make install -j8

Примечание: вы можете использовать любую параллельномер, который вы хотите (-j<num-jobs>).Каждый этап занимает некоторое время в зависимости от вашего процессора.

Как только вы закончите, путь установки, заданный в вашей строке конфигурации (например, C:\install\Qt\5.12.1-static), будет содержать вашу установку qt.Затем вы можете добавить это в qtcreator как новую версию qt (если вы ее так строите).

Приложение - выпустить статическую конфигурацию

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

.. \ qt5 \ настроить со следующими параметрами:

-release -optimize-size -opengl desktop -no-pch -platform win32-g++ -opensource -static -static-runtime -skip webengine -nomake examples -nomake tests -nomake tools -accessibility -no-sql-sqlite -no-opengl -platform win32-g++ -qt-zlib -qt-libpng -qt-libjpeg -confirm-license -prefix "C:\install\Qt\5.12.1-static"

, где я добавил:

  • -release - вместо отладки
  • -optimize-size - сделать наименьший размер
  • -opengl desktop - opengl, если он у вас должен быть
  • -no-pch - нет предварительно скомпилированных заголовков, не уверен, что вам это нужно, но ...
  • -platform win32-g++ - Опять же, это может помочь, если у вас есть проблемы со сборкой, но, вероятно, вам это не нужно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...