mafulechka
mafulechka21 февраля 2020 г. 16:03

Теперь Qt можно перемещать!

Начиная с версии 5.14.0 Qt можно перемещать , то есть можно перенести установку Qt в другую директорию, не нарушая функциональность и не загружая плагины.


Что это значит для меня?

Давайте перейдем к роли мастера сборки Qt в проекте Windows. Вы тот, кто знает все настройки аргументов наизусть. Вы знаете, какой винтик оптимизации повернуть, а какую ненужную функцию отключить.
Ваша сборка Qt идеально адаптирована к проекту, и вы предоставляете zip-файл, содержащий установку Qt.

configure -prefix C:/Qt/5.12.6 ...more options...
jom
jom install
zip -r X:\shared_stuff\qt-5.12.6.zip C:\Qt\5.12.6

Затем ваши товарищи по команде извлекают архив в одно и то же место, и все работает отлично.
Теперь, по любой причине, Joe Developer должен распаковать инсталляцию Qt в какой-либо другой drive/directory (директорию).
Qt в этом другой директории не работает. QMake не будет работать должным образом. Плагины не могут быть загружены. Asset’ы Qt не найдены.

Почему все сломалось?

Исторически, конфигурация Qt встраивала директорию установки в исполняемом файле qmake и библиотеку Qt5Core. Логика в QLibraryInfo пытается найти плагины, asset’ы и mkspecs под жестко заданным префиксом, который всегда является тем, что вы передали для настройки с аргументом -prefix.

А в Qt 5.14 перемещение директории установки работает?

О да! Начиная с Qt 5.14.0 префикс установки может автоматически определяться расположением библиотеки Qt5Core или самого исполняемого файла без использования жестко заданных путей.
Этот автоматизм контролируется в то время, когда Qt конфигурируется через функцию перемещения .
Эта функция включена по умолчанию для нестатических сборок Qt.
Если вам нужна перемещаемая статическая сборка, включите эту функцию вручную:

onfigure -static -feature-relocatable ...

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

Если мне это не нравится, могу ли я выключить эту функцию?

Конечно вы можете.

configure -no-feature-relocatable ...

вернет старое поведение.
Например, дистрибутивы Linux не нуждаются в перемещаемом Qt и могут отключить эту функцию.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
S

C++ - Тест 001. Первая программа и типы данных

  • Результат:53баллов,
  • Очки рейтинга-4
S

C++ - Тест 003. Условия и циклы

  • Результат:57баллов,
  • Очки рейтинга-2
g

C++ - Тест 005. Структуры и Классы

  • Результат:100баллов,
  • Очки рейтинга10
Последние комментарии
Evgenii Legotckoi
Evgenii Legotckoi25 мая 2023 г. 4:49
Как написать игру на Qt - Урок 2. Анимация героя игры (2D) Код на строчка 184-198 вызывает перерисовку области на каждый 4-й такт счётчика. По той логике не нужно перерисовывать объект постоянно, достаточно реже, чем выполняется игровой слот. А слот вып…
J
JonnyJo21 мая 2023 г. 10:49
Как написать игру на Qt - Урок 2. Анимация героя игры (2D) Евгений, благодарю! Всё равно не совсем понимаю :( Если муха двигает ножками только при нажатии клавиш перемещение, то что, собственно, делает код со строк 184-198 в triangle.cpp? В этих строчка…
Evgenii Legotckoi
Evgenii Legotckoi21 мая 2023 г. 5:57
Как написать игру на Qt - Урок 2. Анимация героя игры (2D) Добрый день. slotGameTimer срабатывает по таймеру и при каждой сработке countForSteps увеличивается на 1, это не зависит от нажатия клавиш, нажатая клавиша лишь определяет положение ножек, котор…
J
JonnyJo20 мая 2023 г. 11:27
Как написать игру на Qt - Урок 2. Анимация героя игры (2D) Евгений, здравствуйте! Подскажите, а почему при нажатии одной клавиши переменная countForSteps увеличивается не на 1, на 4, ведь одно действие даёт увеличение этой переменной только на единицу? …
Сейчас обсуждают на форуме
Evgenii Legotckoi
Evgenii Legotckoi16 апреля 2023 г. 4:07
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Да, это возможно. Но подобные вещи лучше запускать через celery. То есть drf принимает команду, и после этого регистрирует задачу в celery, котроый уже асинхронно всё это выполняет. В противном …
АБ
Алексей Бобров14 декабря 2021 г. 19:03
Sorting the added QML elements in the ListModel I am writing an alarm clock in QML, I am required to sort the alarms in ascending order (depending on the date or time (if there are several alarms on the same day). I've done the sorting …
Evgenii Legotckoi
Evgenii Legotckoi29 марта 2023 г. 4:11
Замена поля ManyToMany Картинки точно нужно хранить в медиа директории на сервере, а для обращения использовать ImageField. Который будет хранить только путь к изображению на сервере. Хранить изображения в базе данных…
Evgenii Legotckoi
Evgenii Legotckoi24 апреля 2023 г. 3:22
Пакеты данных между сервером и клиентами Привет. Если классы имеют что-то общее в полях, а также общую идеологию и их можно вписать в иерархию наследования, то в первую очередь переписать так, чтобы один базовый класс объединял в…

Следите за нами в социальных сетях