Развертывание Qt-приложений в Windows

Для распространения программы, написанной на Qt под Windows, кроме исполняемого файла необходимо вместе с ним предоставлять множество DLL. Раньше (до Qt 5.2) приходилось вручную искать DLL в папке Qt и размещать их рядом с исполняемым файлом. Теперь, для автоматизации этого процесса, есть программа windeployqt, которая поставляется вместе с Qt.

windeployqt — консольная программа, поэтому для ее запуска нужно воспользоваться командной строкой.

Командную строку не стоит запускать так, как это обычно делается в Windows. Qt предоставляет свой способ запуска командной строки, который позволяет вызывать консольные программы Qt без лишних телодвижений. В программах меню «Пуск» должен быть соответствующий пункт в разделе Qt. Например, для Qt 5.7.0 (MinGW 5.3.0) этот пункт называется

Qt 5.7 for Desktop (MinGW 5.3.0 32 bit)

и имеет характерную иконку командной строки.

Запуск windeployqt выглядит следующим образом:

windeployqt <путь>

где <путь> — это путь к исполняемому файлу вашей программы или папке, в которой этот файл находится.

Пример:

windeployqt C:\example\build\release\example.exe

После завершения, все файлы, требуемые для работы вашей программы, будут находиться в папке исполняемого файла.

Рекомендации

Разделение файлов сборки и рабочих файлов

По умолчанию исполняемый файл создается в папке сборки, где, кроме него, создается множество других файлов, которые необходимы для сборки, но не нужны для работы программы. А windeployqt примешает к ним файлы, которые нужны только для работы программы.

Рекомендация состоит в том, чтобы разделить файлы сборки от рабочих файлов. Для этого в файле проекта необходимо добавить строчку

DESTDIR = папка_программы

где папка_программы — это имя папки, где будет размещен исполняемый файл, отдельно от файлов сборки. После выполнения windeployqt в этой папке будут находиться только файлы необходимые для работы программы. Что облегчит их распространение или создание установщика.

Примечание: имя папки не должно содержать кириллицу.

Автоматическое развертывание

Чтобы windeployqt запускалась автоматически, можно в файл проекта *.pro добавить следующую строчку:

win32:QMAKE_POST_LINK += windeployqt $$OUT_PWD/$$DESTDIR

где $$OUT_PWD/$$DESTDIR задает папку с исполняемым файлом. Задание папки не универсально и работает если в DESTDIR указан относительный путь.

Ссылки

Описание windeployqt на официальном сайте.

Реклама

Градуированный круг

Круг имеет 2 градуировки от 0 до 360 градусов и от 0 до ±180 градусов.

graduated-circle

Вращающееся изображение на сайте

Пример вращающегося изображения.

С помощью библиотеки jQuery Reel объект на изображении можно заставить вращаться. Вращение можно организовать вокруг вертикальной и горизонтальной оси. Объект может вращаться как сам по себе так и с помощью мыши.

Далее будет описано как создать изображение с объектом вращающемся вокруг вертикальной оси.

Сперва требуется создать некоторое количество изображений объекта под разными углами. Изображения должны иметь одинаковую высоту и ширину.

Затем объединить все изображения в коллаж. Например:

image-reel(485x254)

Порядок изображений в коллаже: слева направо и сверху вниз.

Библиотека предоставляет возможность обойтись без коллажа, но этот способ здесь не рассматривается.

Существует простой способ создания коллажей с помощью программы ImageMagick. Файлы с изображением объекта под разными углами лучше именовать следующим образом:

  • image-001.jpg
  • image-002.jpg
  • image-003.jpg
  • и т.д.

Последовательность нумерации должна совпадать с последовательностью вращения.

ImageMagick предоставляет консольную утилиту montage для склейки изображений. Чтобы ей воспользоваться, следует запустить консоль (командную строку), перейти в папку с изображениями и выполнить команду:

montage *.jpg -geometry 485x254 collage.jpg

где:

  • *.jpg — указывает, что требуется объединить все изображения с расширением jpg в данной папке. Вместо этого можно просто перечислить изображения через пробел: image-001.jpg image-002.jpg image-003.jpg и т. д.
  • 485x254 — размер исходных изображений в пикселях (ширина x высота). Если указать другой размер, то каждое изображение будет отмасштабировано до указанного размера. Далее значения ширины и высоты будут использованы в html-коде.
  • collage.jpg — коллаж, итоговое изображение.

Чтобы встроить вращающееся изображение в html-страницу, следует воспользоваться следующим кодом:

<html>
  <head>
    <script src="//code.jquery.com/jquery-2.1.3.min.js"></script>
    <script src="//code.vostrel.cz/jquery.reel.js"></script>
  </head>
  <body>
    <img src="image-001.jpg" width="485" height="254"
      class="reel"
      data-image="collage.jpg"
      data-frames="24"
      data-footage="6"
      data-revolution="800">
  </body>
</html>

В <head> подключается библиотека jQuery и плагин Reel. В <body> изображение добавляется стандартным способом с помощью тега <img>. С помощью атрибута src указывается изображение, которое будет отображаться пока библиотека или коллаж не загрузились, а также если что-то пошло не так и вращение не заработало.

Другие атрибуты:

  • width="485" — ширина одного изображения в коллаже.
  • height="254" — высота одного изображения в коллаже.
  • class="reel" — связь с библиотекой.
  • data-image="collage.jpg" — коллаж.
  • data-frames="24" — количество изображений в коллаже.
  • data-footage="6" — количество изображений по горизонтали.
  • data-revolution="800" — количество пикселей, которое должен пройти указатель мыши для полного оборота.

Кроме этих атрибутов библиотека предоставляет множество других, с помощью которых можно заставить изображение вращаться без использования мыши, задать скорость этого вращения, указать начальное изображение в коллаже или заставить изображение вращаться вокруг горизонтальной оси. Со всеми атрибутами можно ознакомиться на странице библиотеки.

Без коллажа

Можно обойтись без коллажа, воспользовавшись атрибутом data-images, в котором можно задать диапазон изображений.

<html>
  <head>
    <script src="//code.jquery.com/jquery-2.1.3.min.js"></script>
    <script src="//code.vostrel.cz/jquery.reel.js"></script>
  </head>
  <body>
    <img src="image-001.jpg"
      class="reel"
      data-images="image-###.jpg|1..100"
      data-revolution="800">
  </body>
</html>

Вертикальная черта в атрибуте data-images отделяет шаблон имени файла изображения от диапазона чисел, которые задают номер первого и последнего изображения. Алгоритм вращателя заменяет решетки в имени файла на числа из диапазона. Между числами в диапазоне должны быть две точки.