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

Qt, QMake

Содержание

Начиная с версии 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 хостинг.
Поддержать автора Donate

Комментарии

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

Внесите вклад в развитие сообщества EVILEG.

Узнайте, как стать автором сайта.

Изучить
Donate

Добрый день, Дорогие Пользователи !!!

Я Евгений Легоцкой, разработчик EVILEG. И это мой хобби-проект, который помогает учиться программированию другим программистам и разработчикам

Если сайт помог вам, и вы хотите также поддержать развитие сайта, то вы можете сделать пожертвование следующими способами

PayPalYandex.Money
Timeweb

Позвольте мне порекомендовать вам отличный хостинг, на котором расположен EVILEG.

В течение многих лет Timeweb доказывает свою стабильность.

Для проектов на Django рекомендую VDS хостинг

Посмотреть Хостинг Timeweb
АС
26 мая 2020 г. 12:29
Артём Сун-Дун-Чан

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:50баллов,
  • Очки рейтинга-4
МН
25 мая 2020 г. 12:33
Митя Нагибин

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:50баллов,
  • Очки рейтинга-4
f
25 мая 2020 г. 6:05
falcon

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

  • Результат:66баллов,
  • Очки рейтинга-1
Последние комментарии
29 мая 2020 г. 7:30
Евгений Легоцкой

Qt/C++ - Урок 039. Как закрасить строку в QSqlTableModel по значению в столбце

У меня работает. Исправлял в проекте, который приложен к статье. А что происходит в вашем коде, с учётом места вызова этого кода, я знать не могу ;) Дебажьте и добавляйте условия, кото…
МА
29 мая 2020 г. 7:27
Михаил А

Qt/C++ - Урок 039. Как закрасить строку в QSqlTableModel по значению в столбце

QModelIndexList rowIndexes = ui->tableView->selectionModel()->selectedRows(); model->removeRows(rowIndexes.first().row(), rowIndexes.size()); model-&…
29 мая 2020 г. 7:14
Евгений Легоцкой

Django - Урок 036. Как добавить аутентификацию через социальные сети. ВКонтакте

Неправильно прописали URL, на который возвращается ответ от OAuth ВКонтакте. Настраивайте ваше приложение в консоли разработчика ВКонтакте
АЛ
29 мая 2020 г. 6:24
Александр Леонидов

Django - Урок 036. Как добавить аутентификацию через социальные сети. ВКонтакте

Здравствуйте! После клика на ссылку авторизации выдает json словарь с ошибкой: {"error":"invalid_request","error_description":"redirect_uri is incorrect, check application redirect uri in …
28 мая 2020 г. 16:14
Евгений Легоцкой

Qt/C++ - Урок 039. Как закрасить строку в QSqlTableModel по значению в столбце

Ну в моём примере, который в статье сработало так model->setData(model->index(1, 1), 7); Поскольку model->index(1, 0) - это индекс колонки id, которая скрыта, поэтому…
Сейчас обсуждают на форуме
29 мая 2020 г. 8:52
Vladimir Sergeevich

Масштабирование двумя пальцами на мобильных платформах

Я планировал описать этот момент на блоге, но никак руки не доходят (уже год). Летом дойдут. Тем не менее, у меня в репозитории лежит рабочий код игрушки "пазлы", где есть все это. …
29 мая 2020 г. 7:51
Евгений Легоцкой

Графическое ускорение

Зависит от платформы и поддерживаемых технологий. В QML в первую очередь используется OpenGL и отрисовка производится средствами GPU. Но может переключаться на использование CPU и прог…
ИП
29 мая 2020 г. 2:55
Игорь Порошин

QTablwView + QSqlQueryModel скрыть пустой столбец

Да, понятно. В данном случае лучше использовать серверную процедуру (если такие поддерживаются), в которой будет проверяться наличие всех пустых строк у нужного столбца и вызываться соответ…
RG
28 мая 2020 г. 19:21
Rovshan Gurbanov

Сборка под старые версии Android

У меня SDK почти все версии есть, NDK есть версии 10, 17, 21. Но собирается приложение только с NDK v21 под Android версии 7.0 и выше Версия Qt у меня 5.14.2
28 мая 2020 г. 8:58
Евгений Легоцкой

Освобождение памяти QMainWindow::setCentralWidget

Да, соглашусь. Просто удаление происходит позже, а не сразу.
О нас
Услуги
© EVILEG 2015-2020
Рекомендует хостинг TIMEWEB