четверг, 17 марта 2016 г.

Распространение приложений на Qt, или как найти нужные DLL - windeployqt.exe

Проблема распространения приложения на Qt пользователю - больная тема для большинства разработчиков.
Оказывается, она упрощается с помощью утилиты от самих разработчиков Qt. Но к сожалению эта утилита упоминается очень редко, так что я сам узнал о ней только что. Возможно у неё есть недостатки, пока мне неизвестные но на первый взгляд она удобная, если бы не была консольной. Но с последней проблемой мы можем справиться).

Откроем Qt Creator, зайдём в меню "Инструменты"- подпункт "Параметры", слева пункт "Среда", вкладка "Внешние утилиты".
И в нижнем меню "Дабавить" выберем вначале "Новый раздел" (я выбрал ёмко и просто - ) "Добавить утилиту" (соответственно "windeployqt")
И справа заполним следующим образом:

Описание: "Эта утилита добавляет необходимые DLL в папку с EXE"
Программа: %{CurrentProject:QT_INSTALL_BINS}\windeployqt.exe
Параметры: --compiler-runtime %{CurrentProject:BuildPath}\%{CurrentBuild:Type}
Среда: PATH=C:\Qt\Qt5.6.0\Tools\mingw492_32\bin;${PATH}

*В параметрах нужно указать строку, где создаётся наш EXE.) А поскольку редактировать настройки каждый раз неудобно, соберём путь из заботливо предоставленных авторами Qt переменных. У меня расположение компилятора из системной переменной не подхватилось, на всякий случай добавил.*

В результате должно получиться

Можно добавить параметры, отвечающие за копирование плагинов, платформ и т.д. Подробнее:
http://doc.qt.io/qt-5/windows-deployment.html

Так же придётся добавить в системную переменную следующие значения (пример для Qt 5.6.0):
C:\Qt\Qt5.6.0\Tools\mingw492_32\bin
C:\Qt\Qt5.6.0\5.6\mingw49_32\bin
*Адрес компилятора нужен, поскольку DLL из его поставки нам тоже понадобятся.*
*Чтобы изменить системные переменные, можно в диалоге "Выполнить" ОС Windiws запустить sysdm.cpl .*
*Так же можно поэкспериментировать с переменными среды самого Qt Creator.*

Всё, можно собирать проект, затем вызывать нашу утилиту и смотреть каталог! Для удаление мусора из каталога - пункт "Очистить" из меню "Сборка"..
Не забудьте добавить те библиотеки, которые вы импортировали сами!

Qt Auto Resize Widgets

У многих начинающих разработчиков, использующих Qt Creator (а кому время, потраченное на создание интерфейса лишнее?) возникает проблема, как сделать, чтобы виджеты сами подстраивались под размер окна (Auto Resize Widgets).
И никакие настройки элементов не помогают.
На самом деле решение элементарно.

В режиме дизайнера мы можем это легко исправить.
Достаточно выбрать в "инспекторе объектов" наше главное окно (обычно называется centralWidget типа QWidget). И присмотреться в верхней части окна Designer-а (сразу под привычным нам меню). Там мы видим маленькие значки очень похожие на пиктограммы компоновщиков (если навести на них мышкой, то и подсказки будут соответствующими). Достаточно выбрать один, как наше главное поле превратится в компоновщик!

Забавно, но это единственный известный мне способ, хотя логичнее было бы увидеть соответствующий пункт меню в "инспекторе объектов". *Именно из-за этого я считал, что эти кнопки относятся к обычным компоновщикам.)