Qt platform plugin windows что это


QT Platform Plugin Windows - ошибка при установке и запуске Viber

Уважаемые пользователи приложения Viber, если вы столкнетесь с данной ошибкой: «Application failed to start because it could not find or load the qt platform plugin Windows», ознакомьтесь с нашей статьей.

Чаще всего ошибки в Вайбер решаются просто

Для ее решения проблемы QT Platform Plugin Windows при запуске Viber, можно попробовать проделать следующее:

  1. Разработчики заявили что эта ошибка может возникать, если в пути установленного Viber есть кириллические символы. Установленную версию Viber в папку «C:UsersПользовательAppDataLocalViber», нужно перенести в любое место, например D:Viber. Попробуйте запустить программу оттуда, должно все заработать.
  2. Установите предыдущую версию Viber, в ней этого бага не наблюдается. Скачать старую версию Viber можно тут.
  3. Решение аналогично второму пункту, сразу можно скачать и установить Портативную версию Viber, версия будет не последняя, но рабочая.
QT Platform Plugin Windows — самая частая проблема с мессенджером

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

Как развернуть(deployment) Qt приложение на windows? — Хабр Q&A

Здравствуйте, с вашего позволения - зайду с далека. Спасибо.

Писал я себе, значит, приложение, не зная бед, пока не задумался о развёртывании.

Сам пользуюсь linux, но параллельно, пока я писал, приложение тестировал друг на своей windows, у него так же установлен QtCreator + Библиотеки Qt 5.3.1 + MinGW.

Собрались. Скомпилировали на Release. Кое-как подобрали зависимости, Dependency Walker - оказался слишком сложным, поэтому подбирали, методом тыка( на файл :) ), пока приложение не стало просить qt platform plugin. Нагуглил вот эту статью на хабре. Сделал так же как у автора статьи. Начала выскакивать такая вот ошибка:

Психанув, друг закинул в папку с exe'шником все библиотеки, какие только нашёл, приложение заработало однако радовались не долго, начали удалять из папки библиотеки, ища тем самым ту из за которой оно "вдруг" заработало, в итоге в папке остались ровно те же файлы что и были ранее, но приложение продолжало работать - магия! :D
Скинули знакомому, разумеется, та же ошибка что и ранее.

Опытным путём выяснили что ошибка выскакивает на этапе инициализации QApplication.
Исходник тут.

Список библиотек которые мы подобрали:
  • qwindows - platform plugin
  • qsqlite - sqlplugin
  • icudt52
  • icuin52
  • icuuc52
  • libgcc_s_dw2-1
  • libstdc++-6
  • libwinpthread-1
  • Qt5Core
  • Qt5Gui
  • Qt5Sql
  • Qt5Widgets
  • Qt5Xml

Распространение / Блог компании iStodo / Хабр

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

Итак, в идеале нам нужны дистрибутивы:
  • Windows
  • OS X (.dmg)
  • OS X (.pkg — App Store)
  • Linux (.deb)
  • Linux (.rpm)
  • Linux (.tar.gz — universal)

Qt Installer Framework

Справедливости ради стоит отметить, что Qt имеет свой, разумеется кроссплатформенный, фреймворк для создания установщиков. Он позволяет создавать как обычные, так и online инсталлеры, способные докачивать дополнительные компоненты из репозитория. Также есть возможность вставлять свои виджеты, добавлять новые действия (страницы). Вы наверняка устанавливали Qt Creator, а значит видели эту систему в работе. Однако при создании установщика приходится писать xml конфиг, работать с ключами в командной строке, в общем настройка имеет довольно высокий порог вхождения, особенно по сравнению с другими решениями. При этом я так и не нашел в документации упоминания о том, как пропустить страницу выбора компонентов. В общем получился весьма специфичный продукт, минус которого еще и в том, что такой способ установки считается родным только на Windows платформе.
Windows

Соответственно и вариантов создания установщиков для этой ОС масса, но я остановился на довольно удобном open source продукте — Inno setup. Создание инсталлера в нем не сложнее, чем собственно установка «далее-далее-готово».
После прохождения мастера создания, на выходе получаем скрипт, который можно легко поменять под следующие версии своей программы.
Linux

Исторически сложилось, что софт под Linux распространяется через репозитории, причем дистрибутив каждой программы представляет собой пакет специального вида, содержащий собственно файлы программы, информацию о зависимостях, и некоторые другие метаданные. Несмотря на все попытки стандартизации, кроме мейнстримовых .deb и .rpm существует множество других форматов, специфичных для отдельных дистрибутивов Linux. Canonical экспериментирует с форматом .click, напоминающим бандлы приложений в OS X, но на сегодня рассматривать этот вариант в числе основных пока преждевременно. Раз уж Ubuntu де-факто стандарт Линукса на десктопе, я буду описывать создание пакетов именно на этой платформе. Также следует отметить, что чаще всего дистрибутив стороннего ПО несет с собой все необходимое для функционирования, потому продвинутые возможности пакетной системы остаются незадействованными.
.tar.gz

Что общего между дистрибутивами? Конечно командная оболочка! Значит будем делать скриптовый установщик, который запустится на любой системе, вне зависимости от предполагаемого формата пакетов. Для того, чтобы система «увидела», что установлена новая программа, каждый файл должен занять положенное место. Минимальный набор состоит из: иконки, исполняемого файла, и специального конфига с расширением .desktop

Иконка: Согласно спецификации, Linux не требует преобразовывать исходники иконки в какие-либо сборки, нужно просто скопировать (при установке) файлы в поддиректории вида:

/usr/share/icons/hicolor/RxR/apps, где R — разрешение иконки
или
/usr/share/icons/hicolor/scalable/apps — если вы хотите установить векторное изображение в формате .svg
Однако это еще не все, каждая тема иконок имеет свой кэш, и если его не обновить — увидеть новую иконку не получится. Кэш автоматически обновляется при штатной установке пакетов, либо можно сделать это вручную, выполнив команду:
gtk-update-icon-cache /usr/share/icons/hicolor
Исполняемый файл
/usr/bin
Конфигурационный файл .desktop
/usr/share/applications
содержит всю информацию о программе — название и описание приложения, его категория, название иконки и т.д.

Для примера:

[Desktop Entry] Name=iStodo Comment=iStodo is an organizer for students with scheduling and planning features. GenericName=Organizer for students Exec=istodo Icon=istodo Categories=Office;Qt; Terminal=false Type=Application Version=1.2 Name[ru]=Органайзер iStodo Comment[ru]=Составление расписания и планирование учебы GenericName[ru]=Органайзер для студентов 

Узнать больше можно прочитав стандарт.

Правилом хорошего тона при установке сторонних программ с нестандартным способом установки будет хранение всех своих файлов в подкаталоге /opt/myapp, куда в том числе следует положить и деинсталлер.

Итак, в итоге у меня получился следующий скрипт, который полагает, что рядом с ним лежит бинарник, файл .desktop, скрипт на удаление, папка с иконками(в ней подкаталоги по размерам):

install.sh
#!/bin/bash iconsPath="/usr/share/icons/hicolor" desktopPath="/usr/share/applications" installPath="/opt/myapp" linkPath="/usr/bin/myapp" #Check user if [[ $EUID -ne 0 ]]; then echo "This script must be run as root" exit 1 fi #Remove old version if [ -d $installPath ]; then $installPath'/uninstall.sh' > /dev/null fi echo "myapp install..." mkdir -v $installPath cp -v myapp $installPath cp -v uninstall.sh $installPath cp -v myapp.desktop $desktopPath ln -sv $installPath'/myapp' $linkPath chmod a+x $linkPath echo "---" cp -v icons/32x32/myapp.png $iconsPath'/32x32/apps' cp -v icons/48x48/myapp.png $iconsPath'/48x48/apps' cp -v icons/64x64/myapp.png $iconsPath'/64x64/apps' cp -v icons/128x128/myapp.png $iconsPath'/128x128/apps' cp -v icons/256x256/myapp.png $iconsPath'/256x256/apps' gtk-update-icon-cache /usr/share/icons/hicolor update-desktop-database echo "...finished!" 

Логично, что потребуется и скрипт для удаления программы:
uninstall.sh
#!/bin/bash iconsPath="/usr/share/icons/hicolor" desktopPath="/usr/share/applications" installPath="/opt/myapp" linkPath="/usr/bin/myapp" echo "myapp uninstall" #Check user if [[ $EUID -ne 0 ]]; then echo "This script must be run as root" exit 1 fi rm -v $iconsPath'/32x32/apps/myapp.png' rm -v $iconsPath'/48x48/apps/myapp.png' rm -v $iconsPath'/64x64/apps/myapp.png' rm -v $iconsPath'/128x128/apps/myapp.png' rm -v $iconsPath'/256x256/apps/myapp.png' rm -v $desktopPath'/myapp.desktop' #Remove app folder echo "---" rm -rfv $installPath rm -v $linkPath echo "Uninstall finished!" 

.deb

Несмотря на пугающе-монструозные спецификации формата, для создания простейшего пакета требуется всего один конфигурационный файл — control. Но для начала нам нужно провести некоторые приготовления:
a) Создать папку проекта, с указанием версии программы и пакета, например myapp-1.1-1
b) В нее добавить папку DEBIAN (регистр важен!), в которой будут находиться все служебные файлы, в частности control
Пример для control
Package: istodo Version: 1.2-1 Section: misc Architecture: amd64 Installed-Size: 16500 Maintainer: Yakov Eremin <[email protected]> Description: Organizer for students iStodo is an organizer for students with scheduling and planning features. 
Тут все очевидно, нужно только заметить, что полное описание начинается с пробела
c) Создать структуру каталогов, повторяющую положение файлов установленной программы в файловой системе, нечто вроде
myapp-1.1-1 ├── DEBIAN │   └── control └── usr ├── bin │   └── myapp └── share ├── applications │   └── myapp.desktop └── icons └── hicolor ├── 128x128 │   └── apps │   └── myapp.png ├── 256x256 │   └── apps │   └── myapp.png ├── 32x32 │   └── apps │   └── myapp.png ├── 48x48 │   └── apps │   └── myapp.png └── 64x64 └── apps └── myapp.png 

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

Ну и собираем пакет командой:

fakeroot dpkg-deb --build myapp-1.1-1/ 

Если вам требуются дополнительные возможности, тут можно почитать подробный обзор.
.rpm

Как говорится, есть два способа — простой и правильный.
Простой: если .deb пакет не содержит зависимостей и скриптов, то можно просто сконвертировать его, в результате наверняка получится корректно работающий пакет формата .rpm. Для этого предназначена утилита alien, которую можно установить из репозитория.
fakeroot alien -kr myapp-1.0-1.deb 

Минусом такого подхода является неработоспособность пакетов на Fedora 18 и более поздних. Насколько я понимаю, проблема вызвана разницей в правах доступа на системные каталоги, из-за чего происходит конфликт. Остается два варианта: либо исправить пакеты руками так (требуется установленная Fedora), либо собирать .rpm пакеты как положено.
Правильный: К сожалению, тут уже конфигом на три с половиной строки не отделаться, потому «Сборка rpm для чайников» — тема отдельной статьи. При этом полное руководство доступно на русском языке.

Подробнее о сборке пакетов можно почитать тут.

OS X

Как было указано выше, есть два основных метода распространения — образ диска с программой, или загрузка из каталога. Оба метода уже неплохо разобраны, стоит отметить лишь несколько принципиальных моментов.
Для того, чтобы программа могла запускаться не только на системах с установленным Qt SDK, нужно использовать специализированную утилиту — macdeployqt, которая скопирует все необходимые плагины и фреймворки в бандл приложения. При добавлении ключа "-d" будет сгенерирован .dmg образ, который можно использовать как базовый для кастомизации.
  • Открываем его через дисковую утилиту, конвертируем в read/write
  • Открываем получившийся образ в Finder
  • В меню «Вид» скрываем лишние элементы (строку статуса и т.д.)
  • Добавляем ссылку на /Applicatons
  • Создаем скрытую папку, копируем в нее фоновое изображение
  • В «параметрах вида» (ПКМ) подстраиваем размер иконок, сетку, фон
  • Конвертируем образ обратно

Оглавление цикла статей

Ошибка QT Platform Plugin Windows в Viber

Что делать, если во время установки Viber появляется ошибка QT Platform Plugin Windows

Это  материал будет полезен тем, кто столкнулся с проблемами при установке приложения. «Application failed to start because it could not find or load the qt platform plugin windows» — именно такую ошибку иногда видят пользователи и не знают что делать.

Как исправить ситуацию?

Если вам не повезло столкнуться с такой проблемой, то для ее решения можно попробовать следующие манипуляции:

  • Разработчики иногда связывают эту ошибку с критическими символами. Исправить это может перенос программы – например, папку с приложением нужно перенести с адреса C:\Users\Пользователь\AppData\Local\Viber куда-нибудь на диск D, сократив путь к файлу. Например, пусть будет D:\Viber;
  • Установите более старую версию приложения, раньше такой проблемы не наблюдалось;
  • Скачайте портативную версию, она будет хорошо работать.

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

Интересные записи:

Cобираем qt-4.8.7 и qt creator при помощи mingw-w64 на windows (10), бонусом настравиваем на работу с github

Пару слов о том для чего это понадобилось вообще: у меня была простая ситуация — не было быстрого интернета и был компьютер с начисто установленной windows 10. К тому же проект, который ковыряю, требует сборки как под 32 так и под 64 битную архитектуру, поэтому мне показалось что наличие Qt, одинаково сконфигуренного и скомпилированного под эти архитектуры будет только плюсом.

0) Желательно заранее отрубить службы Windows Search и Superfetch и защитник винды. Они на наших операциях будут только тормозить систему, а ресурсы нам скоро понадобятся. Кроме того очень полезно сделать языком ввода по умолчанию английский.

1) Создаем папку «C:\QT» — тут будут жить наши сборки.

2) Для начала нам конечно же понадобится сам компилятор mingw-w64. Качаем инсталлер тут.

3) Устанавливаем по очереди обе версии:
первая установка:
Version — 5.2.0 — последняя на момент написания статьи;
Architecture — i686 — сначала ставим 32 битную версию (пускай вас не пугает что оно не i386, i686 это Интел пентиум про и выше, сумеете запустить 2k винду на чем то более древнем — удачи!)
Threads — win32 — если не портируете исходники с юниксов лучше выбрать нативные;
Exeption — sjlj — мне нужно так, если вам нужны другие — бога ради;
Build revision — 1 опять же последняя на момент написания статьи;
Назначение выбрал «C:\mingw-w64-i686» ибо из Program Files могут быть проблемы с пробелами в путях у qt.
Вторая установка все то же самое кроме:
Architecture — x86_64;
Путь «C:\mingw-w64-x86_64»;
Я так же убрал галку «создать ярлыки», иначе они перезапишутся 64 битной версией, мне это неудобно.
Если не хотите плодить много папок в корне ставить можно в «C:\QT\mingw-w64-i686» и «C:\QT\mingw-w64-x86_64» соответвенно архитектурам, роли это не играет.

4) Качаем исходники бибилиотеки QT 4.8.7 тут

5) Распаковываем сам Qt (тут лучше заранее озаботится наличием программы 7zip ибо виндовый архиватор сначала будет распаковывать во временную папку, потом копировать из нее туеву хучу мелких файлов, идиот, а потом ещё и создаст дополнительную папку внутри с тем же именем) сразу в 2 копии «C:\QT\qt-4.8.7-mingw-w64-i686» и «C:\QT\qt-4.8.7-mingw-w64-x64» (вторая нужна на случай ошибок при конфигуре, гораздо быстрее переименовать копию и пустить фоном распаковываться ещё одну, чем ждать пока отработает mingw32-make confclean). Если не уверены в архиваторе проверяем чтобы в этих папках сразу были папки bin, util, src и т.д., если архиватор создал ещё одну вложенную — вытаскиваем содержимое на уровень выше.

6) Идем в свойства системы и меняем переменную PATH (надо же в моей 10-ке сделали нормальный интерфейс для этого) добавляем туда путь пока только к 32 битной версии компилятора, у меня это: «C:\mingw-w64-i686\mingw32\bin». Если вдруг у вас в PATH есть пути к другим компиляторам временно убираем их оттуда.

7) Запускаем cmd от админа (это важно) и вводим:

g++ -v

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

Если все нормально переходим в папку с Qt:

cd C:\QT\qt-4.8.7-mingw-w64-i586

запускаем там конфигур как-то так:

.\configure -debug-and-release -opensource -confirm-license -platform win32-g++ -graphicssystem raster -no-openssl -nis -iconv -system-proxies -no-freetype -plugin-sql-odbc -plugin-sql-sqlite -qt-style-windows -qt-style-windowsxp -qt-style-windowsvista -qt-style-plastique -qt-style-cleanlooks -qt-style-motif -qt-style-cde -qt-style-windowsce -qt-style-windowsmobile -qt-style-s60

в этом конфиге по максимому все что можно собрать без зависимостей. Мне openssl не очень нужен, иначе его нужно собрать заранее. Если критично время можно отключить примеры, не собирать дополнительные темы и odbc плагин. Справку по опциям можно получить так: ".\configure -help". Далее ждем несколько минут пока отработает конфигур, и запускаем компиляцию:

mingw32-make -j4

у меня 4 ядерный процессор по этому опция -j4 она обозначает делать компиляцию в 4 потока. Сразу оговорюсь, компиляция с этой опцией до конца не проходит, грохается на qtdeclarative с ошибкой копирования файла, видимо где то неправильно прописаны зависимости. Мне достаточно было запустить компиляцию после сбоя ещё раз. Ошибка кстати повторилась и на 64 битной версии. На core i5-3570 c 8-ю гигами оперы компиляция одной версии в 4 потока занимает почти 2 часа.

8) Если у вас медленный интернет, пока компилится сам Qt можно поставить на закачку qt creator 3.2.2 (это последняя версия, которая компилится на 4.8.x), ActivePerl-5.20.2 !32 битную версию! и msysgit !32 битную версию! Указанные тут верcии это последние на момент написания статьи, и, соответственно, те с которыми работал я. Если у вас что-то не пошло на более новых, попробуйте указанные мной. Предупрежу сразу, до сборки qtcreator ставить msysgit очень не желательно, креатор нормально не соберется если увидит в патче sh.exe, а для нормальной работы с гитом его как раз стоит ставить с прописыванием PATH.

9) Устанавливаем perl: я не ставил документацию и примеры, местом назначения сделал «C:\perlx86». Галку «Add perl to the PATH environment variable» не снимаем. После установки в командной строке (естественно не в той, в которой компилится Qt) пишем «perl -v», должна появится информация о версии.

10) Распаковываем qt creator в " C:\QT\qt-creator-opensource-src-3.2.2", так же проверяем чтобы внутри не было вложенной папки, а сразу были папка bin и остальное.

11) Ждем когда компилируется qt. Никаких прямых сообщений что компиляция завершена успешно, не будет. У меня последним собрался 'C:/QT/qt-4.8.7-mingw-w64-i586/demos/declarative/webbrowser'. Можно запустить qtdemo.exe для проверки, позапускать примеры. Снова открываем редактор переменных среды, дописываем в PATH «C:\QT\qt-4.8.7-mingw-w64-i586\bin». Опять же убеждаемся, что это единственный профиль qt в PATH. Проверяем себя, перезапустив командную строку и набрав «qmake -v».

12) Открываем блокном файл «C:\QT\qt-creator-opensource-src-3.2.2\src\libs\utils\tcpportsgatherer.cpp», находим строчку

#if __GNUC__ == 4 && (!defined(__MINGW64_VERSION_MAJOR) || __MINGW64_VERSION_MAJOR < 2)

и меняем её на
#if __MINGW64_VERSION_MAJOR == 5 || (__GNUC__ == 4 && (!defined(__MINGW64_VERSION_MAJOR) || __MINGW64_VERSION_MAJOR < 2))

13) Перезапускаем cmd опять же от админа. Собираем creator в новой папке:

mkdir C:\QT\qt-creator-3.2.2-x86
cd C:\QT\qt-creator-3.2.2-x86
qmake -r ../qt-creator-opensource-src-3.2.2/qtcreator.pro
mingw32-make release -j4

надеюсь, повторяться про опцию -j4 не надо.

14) Ждем окончания компиляции, запускаем qtcreator, убеждаемся что работает. Закрываем, настраивать в нем пока ещё нечего. Если очень жалко места на диске и оперативы, можно уже скомпиленный creator закинуть в папку с Qt (скопировать только папки bin, lib, share) и добросить в папку bin недостающие dll-ки из mingw. По человечески же, надо наоборот: убрать компилятор и Qt из PATH и докопировать в папку bin creator-а dll-ки из папок bin от Qt и компилятора.

15) Снова открываем редактор PATH убираем оттуда путь к скомпиленному Qt «C:\QT\qt-4.8.7-mingw-w64-i586\bin» и меняем путь к компилятору c «C:\mingw-w64-i686\mingw32\bin» на «C:\mingw-w64-x86_64\mingw64\bin». Опять же перезапускаем cmd от админа и проверяем что нам выдаст

g++ -v

если все в норме, делаем все то же самое что и в шаге 6, только путь у нас теперь будет другой.

cd C:\QT\qt-4.8.7-mingw-w64-x86_64
.\configure -debug-and-release -opensource -confirm-license -platform win32-g++ -graphicssystem raster -no-openssl -nis -iconv -system-proxies -no-freetype -plugin-sql-odbc -plugin-sql-sqlite -qt-style-windows -qt-style-windowsxp -qt-style-windowsvista -qt-style-plastique -qt-style-cleanlooks -qt-style-motif -qt-style-cde -qt-style-windowsce -qt-style-windowsmobile -qt-style-s60
mingw32-make -j4

16) Теперь, пока компилится 64 битная версия Qt, можно заняться и гитом (джитом, не знаю какая транскрипция правильнее). Устанавливаем msysgit v2.6.3 !32 битную версию! запускаем инсталлер сразу от админа, иначе он поставит нам версию только для локального пользователя, оно нам не надо. Путь я выбрал «C:\msysGitX86». На следующем шаге можно ткнуть галку, которая создаст ярлык к консоли на рабочем столе. Eщё через шаг выбираем «Use git from the Windows Command Promt», Я еще выбрал «Use Windows` default console window» для терминала, остальное на любителя или по умолчанию.

На blogspot есть замечательная статья о том как подружить qt creator и github. Однако в ней не даны инструкции что делать если винт на котором все это настроено сгорел синим пламенем. Попробуем восполнить этот пробел.

17) Запускаем git-bash от админа, с ярлыка который нам создал установщик

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

git config --global user.email "[email protected]"
git config --global user.name "myGithubNick"
git config --global push.default simple

генерим новую пару ключей для ssh:

ssh-keygen -t rsa -C "[email protected]"

3 раза жмакаем enter, заходим браузером в свой профиль на гитхабе, удаляем старый ключ (если конечно не собираемся им пользоваться, а он утрачен как у меня) и добавляем новый.

пробуем склонировать существующий репозиторий:

mkdir C:\\myproject
cd C:\\myproject
git clone [email protected]:myGithubNick/mysuperproject.git

обратите внимание что пользователь «git», а не никнейм; никнейм указывается уже после двоеточия. Кроме того никаких https:// или git:// перед адресом быть не должно, если получаете сообщение, что нужно использовать https, значит гитхаб не опознал в вас владельца репозитория, ищите проблемы с ключами или ssh. Если все в порядке, гит сделает нам копию репозитория в папке mysuperproject. Зайдем в нее и проверим что репозиторий рабочий, и у нас есть все права

cd ./mysuperproject
git remote -v
touch .testfile.txt
git add .testfile.txt
git commit -m test
git push
git reset --hard HEAD~1
git push -f

естественно ошибок быть не должно, если есть значит что-то не так с установкой гита или ssh.

18) Дожидаемся пока скомпилится 64 битная версия Qt. Убираем из PATH 64 битный компилятор, либо совсем, либо меняем на 32 битную версию, это уже как удобнее. Открываем блокнотом «C:\QT\qt-4.8.7-mingw-w64-x86_64\mkspecs\win32-g++\qmake.conf», сразу после комментов дописываем «QMAKE_TARGET.arch += x86_64», сохраняем, закрываем.

19) Снова запускаем creator (если сейчас он перестал запускаться, значит что-то лишнее есть в path или не все библиотеки мы ему подложили).

Открываем Инструменты(Tools)->Параметры(Options). Сразу же в разделе Среда(Environment) на вкладке Основные(General) нас просят ввести путь к командe patch, можно использовать «C:\msysGitX86\usr\bin\patch.exe». Идём во Внешние утилиты(External Tools) — правим пути.

Переходим в раздел Сборка и запуск(Build & Run), переходим на вкладку Отладчики(Debuggers), нажмаем Добавить(Add), название даем: «mingw32-w64-gdb», путь: «C:\mingw-w64-i686\mingw32\bin\gdb.exe». Снова жмем Добавить(Add), название даем: «mingw64-w64-gdb», путь: «C:\mingw-w64-x86_64\mingw64\bin\gdb.exe».

Переходим на вкладку Компиляторы(Compilers), нажмаем Добавить(Add) ->MinGW, если нет определенных в path имя даем «MinGW32-W64» и путь «C:\mingw-w64-i686\mingw32\bin\g++.exe» (можно и копию сделать для удобства, не страшно). Добавляем ещё один: имя «MinGW64-W64» путь «C:\mingw-w64-x86_64\mingw64\bin\g++.exe», ABI выбираем 64битные, если есть.

Переходим на вкладку Профили Qt (Qt versions), Если 32 битного профиля нет в path добавляем сначала его «C:\QT\qt-4.8.7-mingw-w64-i586\bin\qmake.exe». Потом добавляем 64 битный «C:\QT\qt-4.8.7-mingw-w64-x86_64\bin\qmake.exe». Имена у меня «Qt 4.8.7 mingw-w64 i586» и «Qt 4.8.7 mingw-w64 x86_64» соответвенно.

Переходим на вкладку Комплекты(kits), сначала настраиваем профиль Desktop:
Название:Desktop
Имя в файловой системе: x86
Тип устройства:Desktop
Устройство: Локальный ПК
Sysroot: — оставляем пустым
Компилятор: MinGW32-W64
Отладчик: mingw32-w64-gdb
Профиль Qt: Qt 4.8.7 mingw-w64 i586
Добавляем ещё один
Название:Desktop 64
Имя в файловой системе: x86_64
Тип устройства:Desktop
Устройство: Локальный ПК
Sysroot: — оставляем пустым
Компилятор: MinGW64-W64
Отладчик: mingw64-w64-gdb
Профиль Qt: Qt 4.8.7 mingw-w64 ч86_64
сохраняем, применяем, пробуем что-нибудь собрать.

Вот пожалуй и все что вспомнил по данной теме.

Кстати небольшой хак: если нужно незначительно переконфигурить уже собранную сборку, ну например openssl вы решили добавить или плагин к какому-нить мускулю не собрался, а 2-3-4 часа ждать пока все перекомпилиться ни разу не улыбается, делаем так: выставляем системное время на минут 10-15 раньше чем последний раз конфигурили сборку, переконфигуриваем, возвращаем время на настоящее. Блокнотом изменяем тот(те) мейкфайл(ы) который(е) затрагивает(ют) наши изменения и запускаем мейк, если не ошиблись с мейкфайлами (на самом деле если знать из чего состоит Qt, и что от чего зависит, ошибится трудно) перекомпилится только тот кусок который нам нужен.

PyQt5 не инициализирован плагин,что делать? — Хабр Q&A

Пытаюсь запустить программу не работает что делать
Вот ошибка:

This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Вот код:

from PySide2 import QtCore, QtGui, QtWidgets import sys from Ui import Ui_Dialog app = QtWidgets.QApplication(sys.argv) Form = QtWidgets.QDialog() ui = Ui_Dialog() ui.setupUi(Form) Form.show() #Логика sys.exit(app.exec_())

Вот код интерфейса:

from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(343, 349) Dialog.setStyleSheet("QPushButton{\n" " background-color:white;\n" " width:75px;\n" " height:50px;\n" " font-size:14px;\n" " font-weight:bold;\n" " border:none;\n" " text-aling:center;\n" "}\n" "\n" "QPushButton:hover{\n" " background-color:silver;\n" "}\n" "\n" "QPushButton:pressed{\n" " background-color:#4D4A49;\n" "}\n" "\n" "QLabel{\n" " font-size:25px;\n" " font-weight:bold;\n" "}\n" "\n" "pushButton_17{\n" " background-color:none;\n" "\n" "}") self.gridLayoutWidget = QtWidgets.QWidget(Dialog) self.gridLayoutWidget.setGeometry(QtCore.QRect(10, 70, 320, 251)) self.gridLayoutWidget.setObjectName("gridLayoutWidget") self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget) self.gridLayout.setContentsMargins(0, 0, 0, 0) self.gridLayout.setObjectName("gridLayout") self.pushButton_3 = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_3.setObjectName("pushButton_3") self.gridLayout.addWidget(self.pushButton_3, 1, 1, 1, 1) self.pushButton_2 = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_2.setObjectName("pushButton_2") self.gridLayout.addWidget(self.pushButton_2, 2, 1, 1, 1) self.pushButton_12 = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_12.setObjectName("pushButton_12") self.gridLayout.addWidget(self.pushButton_12, 3, 0, 1, 1) self.pushButton_5 = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_5.setObjectName("pushButton_5") self.gridLayout.addWidget(self.pushButton_5, 1, 0, 1, 1) self.pushButton_8 = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_8.setObjectName("pushButton_8") self.gridLayout.addWidget(self.pushButton_8, 1, 2, 1, 1) self.pushButton_9 = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_9.setObjectName("pushButton_9") self.gridLayout.addWidget(self.pushButton_9, 0, 2, 1, 1) self.pushButton_10 = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_10.setObjectName("pushButton_10") self.gridLayout.addWidget(self.pushButton_10, 3, 1, 1, 1) self.pushButton = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton.setObjectName("pushButton") self.gridLayout.addWidget(self.pushButton, 0, 1, 1, 1) self.pushButton_11 = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_11.setObjectName("pushButton_11") self.gridLayout.addWidget(self.pushButton_11, 3, 2, 1, 1) self.pushButton_4 = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_4.setObjectName("pushButton_4") self.gridLayout.addWidget(self.pushButton_4, 0, 0, 1, 1) self.pushButton_6 = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_6.setObjectName("pushButton_6") self.gridLayout.addWidget(self.pushButton_6, 2, 0, 1, 1) self.pushButton_7 = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_7.setObjectName("pushButton_7") self.gridLayout.addWidget(self.pushButton_7, 2, 2, 1, 1) self.pushButton_13 = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_13.setObjectName("pushButton_13") self.gridLayout.addWidget(self.pushButton_13, 0, 3, 1, 1) self.pushButton_14 = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_14.setObjectName("pushButton_14") self.gridLayout.addWidget(self.pushButton_14, 1, 3, 1, 1) self.pushButton_15 = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_15.setObjectName("pushButton_15") self.gridLayout.addWidget(self.pushButton_15, 2, 3, 1, 1) self.pushButton_16 = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_16.setObjectName("pushButton_16") self.gridLayout.addWidget(self.pushButton_16, 3, 3, 1, 1) self.label = QtWidgets.QLabel(Dialog) self.label.setGeometry(QtCore.QRect(10, 10, 321, 41)) self.label.setText("") self.label.setObjectName("label") self.retranslateUi(Dialog) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_translate("Dialog", "Dialog")) self.pushButton_3.setText(_translate("Dialog", "5")) self.pushButton_2.setText(_translate("Dialog", "2")) self.pushButton_12.setText(_translate("Dialog", "←")) self.pushButton_5.setText(_translate("Dialog", "4")) self.pushButton_8.setText(_translate("Dialog", "6")) self.pushButton_9.setText(_translate("Dialog", "9")) self.pushButton_10.setText(_translate("Dialog", "0")) self.pushButton.setText(_translate("Dialog", "8")) self.pushButton_11.setText(_translate("Dialog", "=")) self.pushButton_4.setText(_translate("Dialog", "7")) self.pushButton_6.setText(_translate("Dialog", "1")) self.pushButton_7.setText(_translate("Dialog", "3")) self.pushButton_13.setText(_translate("Dialog", "*")) self.pushButton_14.setText(_translate("Dialog", "/")) self.pushButton_15.setText(_translate("Dialog", "+")) self.pushButton_16.setText(_translate("Dialog", "-"))

python - PyQt5 - Не удалось загрузить плагин платформы "windows". Доступные платформы: windows, минимальная

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О модели
.

Qt для Windows - развертывание

В этой документации описывается процесс развертывания для Windows. Мы ссылаемся на пример приложения Plug & Paint в документе, чтобы продемонстрировать процесс развертывания.

Средство развертывания Windows windeployqt предназначено для автоматизации процесса создания развертываемой папки, содержащей зависимости, связанные с Qt (библиотеки, импорт QML, подключаемые модули и переводы), необходимые для запуска приложения из этой папки.Он создает «песочницу» для универсальной платформы Windows (UWP) или дерево установки для настольных приложений Windows, которые можно легко объединить в установочный пакет.

Инструмент находится в каталоге QTDIR / bin / windeployqt . Для правильной работы его необходимо запустить в среде сборки. При использовании Qt Installer для его настройки следует использовать сценарий QTDIR / bin / qtenv2.bat .

windeployqt принимает файл .exe или каталог, содержащий файл .exe в качестве аргумента и сканирует исполняемый файл на наличие зависимостей. Если каталог передается с аргументом --qmldir , windeployqt использует инструмент qmlimportscanner для сканирования файлов QML внутри каталога на предмет зависимостей импорта QML. Затем выявленные зависимости копируются в каталог исполняемого файла.

В случае, если Qt был собран с выключенным параметром configure -relocatable , windeployqt заменяет жестко заданные локальные пути в Qt5Core.dll на относительные.

Для настольных приложений Windows необходимые файлы среды выполнения для компилятора также копируются в развертываемую папку по умолчанию (если не указан параметр --no-compiler-runtime ). В случае сборок выпуска с использованием Microsoft Visual C ++ они состоят из распространяемых пакетов Visual C ++, которые предназначены для рекурсивной установки установщиком приложения на целевой машине. В противном случае используются разделяемые библиотеки среды выполнения компилятора.

Для приложения могут потребоваться дополнительные сторонние библиотеки (например, библиотеки баз данных), которые не принимаются во внимание windeployqt.

Дополнительные аргументы описаны в выводе справки инструментов:

 Использование: windeployqt [параметры] [файлы] Инструмент развертывания Qt 5.14.1 Самый простой способ использовать windeployqt - добавить каталог bin вашего Qt установку (например, ) в переменную PATH, а затем запустите: windeployqt <путь-к-приложению-двоичному> Если ICU, ANGLE и т. Д.не находятся в каталоге bin, они должны быть в PATH переменная. Если ваше приложение использует Qt Quick, запустите: windeployqt --qmldir <путь-к-приложению-qml-файлам> <путь-к-приложению-двоичному> Параметры: - ?, -h, --help Отображает справку по параметрам командной строки. --help-all Отображает справку, включая специфические параметры Qt. -v, --version Отображает информацию о версии. --dir <каталог> Использовать каталог вместо двоичного каталога. --libdir <путь> Скопировать библиотеки в путь.--plugindir <путь> Копировать плагины в путь. --debug Предполагать отладочные двоичные файлы. --release Предполагать выпуск исполняемых файлов. --pdb Развернуть файлы .pdb (MSVC). --force Принудительно обновлять файлы. --dry-run Режим моделирования. Веди себя нормально, но не копировать / обновлять любые файлы. --no-patchqt Не исправлять библиотеку Qt5Core. --no-plugins Пропустить развертывание плагинов.--no-libraries Пропустить развертывание библиотеки. --qmldir <каталог> Проверять импорт QML, начиная с каталога. --qmlimport <каталог> Добавить указанный путь в поиск модуля QML локации. --no-quick-import Пропустить развертывание импорта Qt Quick. --no-translations Пропустить развертывание переводов. --no-system-d3d-compiler Пропустить развертывание системного компилятора D3D. --compiler-runtime Развернуть среду выполнения компилятора (только для настольных ПК).--no-virtualkeyboard Отключить развертывание виртуальной клавиатуры. --no-compiler-runtime Не развертывать среду выполнения компилятора (только для настольных ПК). --webkit2 Развертывание WebKit2 (веб-процесс). --no-webkit2 Пропустить развертывание WebKit2. --json Печатать в стандартный вывод в формате JSON. --angle Принудительное развертывание УГЛА. --no-angle Отключить развертывание ANGLE. --no-opengl-sw Не развертывать программную библиотеку растеризатора.--list <опция> Печатать только имена скопированных файлов. Доступные Варианты: источник: абсолютный путь к исходным файлам target: абсолютный путь к целевым файлам относительный: пути к целевым файлам, относительные в целевой каталог отображение: выводит источник и относительный цель, подходящая для использования в Файл сопоставления Appx --verbose <уровень> Уровень детализации (0-2).Библиотеки Qt могут быть добавлены путем передачи их имени (-xml) или удалены путем передачи имя с добавлением --no- (--no-xml). Доступные библиотеки: декларативный конструктор с поддержкой параллельного ядра bluetooth, компоненты enginio геймпад gui qthelp мультимедиа мультимедиа виджеты мультимедиабыстрая сеть nfc opengl positioning printupport qml qmltooling quick quickparticles quickwidgets скрипт скрипт инструменты датчики серийный порт sql svg test webkit webkitwidgets виджеты websockets winextras xml xmlpatterns webenginecore webengine webenginewidgets 3dcore 3drenderer 3dquick 3dquickrenderer 3dinput 3dанимация 3dextras geoservices текст веб-каналаtospeech serialbus веб-просмотр Аргументы: [файлы] Двоичные файлы или каталог, содержащий двоичный файл.

Статическая связь

Для создания статических приложений соберите Qt статически, настроив Qt с -статическим :

 компакт-диск C: \ путь \ к \ Qt configure -static <любые другие необходимые параметры> 

Если позже вам потребуется перенастроить и перестроить Qt из того же места, убедитесь, что все следы предыдущей конфигурации удалены, войдя в каталог сборки и запустив nmake distclean или mingw32-make distclean перед повторным запуском configure .

Связывание приложения со статической версией Qt

В качестве примера в этом разделе будет статически построен пример Plug & Paint.

Когда Qt закончит сборку, соберите приложение Plug & Paint. Сначала мы должны перейти в каталог, содержащий приложение:

 примеры компакт-дисков \ tools \ plugandpaint 

Запустите qmake , чтобы создать новый make-файл для приложения, и выполните чистую сборку для создания статически связанного исполняемого файла:

 нмОчистить qmake -config выпуск nmake 

Возможно, вы захотите выполнить линковку с библиотеками выпуска, и вы можете указать это при вызове qmake .Теперь, при условии, что все скомпилировано и скомпоновано без ошибок, у нас должен быть файл plugandpaint.exe , готовый к развертыванию. Чтобы проверить, что в приложении есть необходимые библиотеки, скопируйте исполняемый файл на машину, на которой не установлены Qt или какие-либо приложения Qt, и запустите его на этой машине.

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

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

Общие библиотеки

У нас есть две проблемы при развертывании приложения Plug & Paint с использованием подхода разделяемых библиотек: среда выполнения Qt должна быть правильно перераспределена вместе с исполняемым файлом приложения, а плагины должны быть установлены в правильном месте в целевой системе, чтобы приложение может их найти.

Создание Qt как общей библиотеки

В этом примере мы предполагаем, что Qt установлен как разделяемая библиотека, которая используется по умолчанию при установке Qt, в каталоге C: \ path \ to \ Qt .

Связывание приложения с Qt в виде общей библиотеки

Убедившись, что Qt собран как разделяемая библиотека, мы можем построить приложение Plug & Paint. Сначала мы должны перейти в каталог, содержащий приложение:

 примеры компакт-дисков \ tools \ plugandpaint 

Теперь запустите qmake , чтобы создать новый make-файл для приложения, и выполните чистую сборку для создания динамически подключаемого исполняемого файла:

 нмОчистить qmake -config выпуск nmake 

Это построит основное приложение, следующие будут создавать плагины:

 кд.. \ plugandpaint / plugins Я сделаю чистым qmake -config выпуск nmake 

Если все скомпилировано и связано без ошибок, мы получим исполняемый файл plugandpaint.exe и файлы подключаемых модулей pnp_basictools.dll и pnp_extrafilters.dll.

Создание пакета приложения

Чтобы развернуть приложение, мы должны убедиться, что мы скопировали соответствующие библиотеки Qt (соответствующие модулям Qt, используемым в приложении) и подключаемый модуль платформы Windows, qwindows.dll , а также исполняемый файл в том же дереве каталогов в подкаталоге выпуска .

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

Если используется динамический OpenGL, вам дополнительно необходимо включить библиотеки, необходимые для ANGLE и программного рендеринга.Для ANGLE требуются как libEGL.dll , так и libGLESv2.dll из каталога Qt lib , а также компилятор HLSL из DirectX. Библиотека компилятора HLSL, d3dcompiler_XX.dll, где XX - номер версии, с которой был скомпонован ANGLE (libGLESv2).

Если Qt был сконфигурирован для линковки с ICU или OpenSSL, соответствующие DLL также должны быть добавлены в папку release .

Примечание: Приложения Qt WebEngine имеют дополнительные требования, которые перечислены в разделе Развертывание приложений Qt WebEngine.

Помните, что если ваше приложение зависит от конкретных библиотек компилятора, они должны распространяться вместе с вашим приложением. Вы можете проверить, с какими библиотеками связывается ваше приложение, с помощью инструмента зависит от . Дополнительные сведения см. В разделе «Зависимости приложений».

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

Если приложение запускается без проблем, значит, мы успешно создали динамически скомпонованную версию приложения Plug & Paint. Но функциональность приложения по-прежнему будет отсутствовать, поскольку мы еще не развернули связанные плагины.

Плагины

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

Итак, чтобы сделать плагины доступными для нашего приложения, мы должны создать подкаталог plugins и скопировать соответствующие библиотеки DLL:

 плагинов \ pnp_basictools.dll плагины \ pnp_extrafilters.dll 

Архив, распространяющий все библиотеки DLL Qt и подключаемые модули для конкретных приложений, необходимые для запуска приложения Plug & Paint, должен включать следующие файлы:

Платформа Windows .dll
Компонент Имя файла
Исполняемый файл plugandpaint.exe
Плагин Basic Tools плагины \ pnp_basictools.dll
Плагин ExtraFilters плагины \ pnp_extrafilters.dll
Подключаемый модуль стиля Qt для Windows Vista styles \ qwindowsvistastyle.dll
Модуль Qt Core Qt5Core.dll
Модуль Qt GUI Qt5Gui.dll
Модуль Qt Widgets Qt5Widgets.dll

Могут потребоваться другие плагины в зависимости от функций, используемых приложением ( iconengines , imageformats ).

Кроме того, архив должен содержать следующие специфичные для компилятора библиотеки (при условии, что Visual Studio 14.0 (2015), 15.0 (2017) или 16.0 (2019)):

Компонент Имя файла
Среда выполнения C vccorlib140.dll , vcruntime140.dll
Среда выполнения C ++ msvcp140.dll

Если использовался динамический OpenGL, то архив должен дополнительно содержать:

Компонент Имя файла
Библиотеки ANGLE libEGL.dll, libGLESv2.dll
Библиотека компилятора HLSL для ANGLE d3ddll opencompiler библиотеки opencompiler .dll

Наконец, если Qt был настроен на использование ICU, архив должен содержать:

Имя файла
icudtXX.dll icuinXX.dll icuucXX.dll

Чтобы убедиться, что приложение теперь может быть успешно развернуто, вы можете распаковать этот архив на машине без Qt и без установленного компилятора и попытаться запустить его.

Альтернативой помещению подключаемых модулей в подкаталог подключаемых модулей является добавление настраиваемого пути поиска при запуске приложения с помощью QCoreApplication :: addLibraryPath () или QCoreApplication :: setLibraryPaths ().

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

Часто удобнее всего добавить путь в функции main () приложения сразу после создания объекта QApplication. После добавления пути приложение будет искать в нем плагины в дополнение к поиску в подкаталоге plugins в собственном каталоге приложения. Можно добавить любое количество дополнительных путей.

Файлы манифеста

При развертывании приложения, скомпилированного с помощью Visual Studio, необходимо выполнить некоторые дополнительные действия.

Во-первых, нам нужно скопировать файл манифеста, созданный при связывании приложения. Этот файл манифеста содержит информацию о зависимостях приложения от параллельных сборок, таких как библиотеки времени выполнения.

Файл манифеста необходимо скопировать в ту же папку , что и исполняемый файл приложения. Вам не нужно копировать файлы манифеста для разделяемых библиотек (DLL), поскольку они не используются.

Если общая библиотека имеет зависимости, которые отличаются от зависимостей от приложения, использующего ее, файл манифеста необходимо встроить в двоичный файл DLL.Начиная с Qt 4.1.3, для встраивания манифестов доступны следующие параметры CONFIG :

 embed_manifest_dll embed_manifest_exe 

Обе опции включены по умолчанию. Чтобы удалить embed_manifest_exe , добавьте

 КОНФИГУРАЦИЯ - = embed_manifest_exe 

в ваш файл .pro.

Дополнительную информацию о файлах манифеста и параллельных сборках можно найти на веб-сайте MSDN.

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

Чтобы установить библиотеки времени выполнения в системе конечного пользователя, вам необходимо включить соответствующий исполняемый файл Распространяемого пакета Visual C ++ (VCRedist) в ваше приложение и обеспечить его выполнение, когда пользователь устанавливает ваше приложение.

Они называются vcredist_x64.exe (64-разрядная версия) или vcredist_x86.exe (32-разрядная версия) и находятся в папке <путь установки Visual Studio> / VC / redist / . .

Кроме того, их можно загрузить из Интернета, например vcredist_x64.exe для Visual Studio 2015.

Примечание: Поставляемое приложение должно быть скомпилировано с точно такой же версией компилятора и той же версией среды выполнения C. Это предотвращает ошибки развертывания, вызванные разными версиями библиотек времени выполнения C.

Зависимости приложений

Дополнительные библиотеки

В зависимости от конфигурации, библиотеки, специфичные для компилятора, должны распространяться вместе с вашим приложением.

Например, если Qt собран с использованием ANGLE, его разделяемые библиотеки и компилятор HLSL из DirectX также будут отправлены.

Вы можете проверить, с какими библиотеками связывается ваше приложение, с помощью инструмента Dependency Walker. Все, что вам нужно сделать, это запустить его так:

 зависит от <исполняемого файла приложения> 

Это предоставит список библиотек, от которых зависит ваше приложение, и другую информацию.

При просмотре сборки релиза исполняемого файла Plug & Paint ( plugandpaint.exe ) с инструментом зависит , инструмент перечисляет следующие непосредственные зависимости от несистемных библиотек:

Qt VC ++ 14.0 (2015) MinGW
  • QT5CORE.DLL - среда выполнения QtCore
  • QT5GUI.DLL - среда выполнения QtGui
  • QT5WIDGETS.DLL - Среда выполнения QtWidgets
  • VCCORLIB140.DLL, VCRUNTIME140D.DLL - среда выполнения C
  • MSVCP140.DLL - Среда выполнения C ++
  • LIBWINPTHREAD-1.DLL
  • LIBGCC_S_DW2-1.DLL
  • LIBSTDC ++ - 6.DLL

При просмотре подключаемых библиотек DLL перечислены точно такие же зависимости.

Начиная с Qt версии 5.2 и новее, официально поддерживаемая версия для OpenSSL - 1.0.0 или новее. Версии> = 0.9.7 и <1.0.0 могут работать, но это не гарантируется.

Плагины для Qt

Для всех приложений Qt GUI требуется подключаемый модуль, реализующий уровень абстракции платформы Qt (QPA) в Qt 5. Для Windows имя подключаемого модуля платформы - qwindows.dll . Этот файл должен находиться в определенном подкаталоге (по умолчанию платформ ) в вашем каталоге распространения.В качестве альтернативы можно настроить путь поиска, который Qt использует для поиска своих подключаемых модулей, как описано ниже.

Ваше приложение может также зависеть от одного или нескольких подключаемых модулей Qt, таких как подключаемый модуль поддержки печати, подключаемый модуль формата изображений JPEG или подключаемый модуль драйвера SQL. Обязательно распространяйте любые плагины Qt, которые вам нужны, вместе с вашим приложением. Подобно плагину платформы, каждый тип плагина должен находиться в определенном подкаталоге (например, printsupport , imageformats или sqldrivers ) в вашем каталоге распространения.

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

Обеспечение обнаружения подключаемых модулей при использовании неперемещаемых сборок

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

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

Если вы добавите собственный путь с помощью QApplication :: addLibraryPath, он может выглядеть так:

Тогда QCoreApplication :: libraryPaths () вернет что-то вроде этого:

  • C: / customPath / plugins
  • C: / Qt /% VERSION% / plugins
  • E: / myApplication / directory

Исполняемый файл будет искать подключаемые модули в этих каталогах и в том же порядке, что и QStringList, возвращаемый QCoreApplication :: libraryPaths ().Вновь добавленный путь добавляется к QCoreApplication :: libraryPaths (), что означает, что поиск будет выполнен первым. Однако, если вы используете QCoreApplication :: setLibraryPaths (), вы сможете определить, какие пути и в каком порядке будут выполняться.

В документе «Как создавать подключаемые модули Qt» описаны проблемы, на которые необходимо обратить внимание при создании и развертывании подключаемых модулей для приложений Qt.

.

Кросс-платформенная разработка программного обеспечения для встраиваемых систем и настольных ПК

  • Дизайн
  • Развитие
  • Развернуть
  • Товар
    • Товар
      • Инструменты дизайна
      • Инструменты разработки
      • Рамка
      • Поддерживаемые платформы и языки
      • Особенности
      • Расширение в Qt Marketplace
    • Отраслевые решения
      • Автомобильная промышленность
      • Промышленная автоматизация
      • Бытовая электроника
      • Медицинский
    • Примеры использования платформы
      • Встроенные устройства
      • Микроконтроллеры (MCU)
      • Интернет вещей
      • Настольное приложение
      • Несколько экранов
      • Мобильные устройства
  • Почему Qt?
    • Почему Qt
      • Обзор
      • Истории успеха
      • Компания
      • Инвесторы
      • Карьера
  • Ресурсы
    • Услуги
      • Profess
.Поддерживаемые платформы

| Qt 5.15

Qt - это коммерческое кроссплатформенное приложение и инфраструктура пользовательского интерфейса с открытым исходным кодом. Он разработан компанией Qt вместе с сообществом Qt Project в рамках модели управления с открытым исходным кодом.

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

Qt поддерживается на множестве 32-битных и 64-битных платформ и обычно может быть построен на каждой платформе с помощью GCC, компилятора поставщика или стороннего компилятора, как указано в обзоре ниже.

Open GL (ES) 2.0, DirectX 9 или 11 (с ANGLE) или альтернативный рендерер требуется для Qt Quick 2. Виджеты могут использоваться без аппаратного ускорения.

В Qt 5 все платформы создаются с использованием абстракции платформы Qt (QPA), которая упрощает перенос Qt в новую операционную систему.

Следующие платформы поддерживаются в Qt 5.15. Для получения информации о поддержке предыдущих выпусков Qt обратитесь к соответствующей версии в Архиве документации Qt.

Конфигурации, выделенные полужирным шрифтом являются эталонными конфигурациями.

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

Настольные платформы

Linux / X11

Распространение Архитектура Компилятор Примечания
openSUSE 15.1 x86_64 GCC 5 или более поздняя версия, GCC 7.5.0 , ICC 19.1
SUSE Linux Enterprise Server x86_64 GCC 5 или более поздняя версия, GCC 10.2.1
Red Hat Enterprise Linux 7.6 x86_64 GCC 5.3.1 через devtoolset-4
Ubuntu 18.04 x86_64 GCC 5 или новее, GCC 9 .3.0
Общий Linux x86 и x86_64 GCC (5 или более поздняя версия), ICC 18.x

macOS

Целевая платформа Архитектура Среда сборки
macOS 10.13, 10.14, 10.15 x86_64 и x86_64h Xcode 11 или 12 (10.15 SDK)

Окна

Операционная система Архитектура Компилятор Примечания
Windows 10 x86 и x86_64 MSVC 2019 , MSVC 2017, MSVC 2015, MinGW 8.1
Windows 8.1 x86 и x86_64 MSVC 2019, MSVC 2017, MinGW 8.1
Windows 7 x86 и x86_64 MSVC 2019, MSVC 2017 , MinGW 8.1 MinGW-сборки GCC 8.1.0 (x86)

Мобильные платформы

Android

Версия платформы Архитектура Компилятор Среда сборки
Android 5.0 или более поздней версии (то есть уровня API 21 и выше) armv7a и x86 , arm64-v8 и x86_64 Clang, предоставляемых Google , MinGW 8.1 RHEL 7.x (x86_64) , macOS 10.15 , Windows 10 (x86_64)

iOS / tvOS / watchOS

Целевая платформа Архитектура Среда сборки Примечания
iOS 12, iOS 13 armv8 ( arm64 ) Xcode 11 (iOS 13.2 SDK)
tvOS 12, tvOS 13 armv8 ( arm64 ) Xcode 11 (tvOS 13 SDK) Предварительный просмотр технологии
watchOS 5, watchOS 6 armv7k Xcode 11 (watchOS 6 SDK) Предварительный просмотр технологии. Нет пользовательского интерфейса.

Универсальная платформа Windows (UWP)

Версия платформы Архитектура Компилятор Среда сборки
Универсальная платформа Windows 10 x86 , x86_64 и armv7 MSVC 2019 , MSVC 2017 Окна 10


Универсальные платформы Windows включают устройства Windows 10, Windows 10 IoT, Xbox One и HoloLens.

Qt для WebAssembly

Целевой браузер Устройство
Chrome Рабочий стол
FireFox Рабочий стол
Safari Рабочий стол, мобильный
Edge (Chrome) Рабочий стол
Браузер Android Мобильный


Если браузер поддерживает WebAssembly, Qt должен запуститься.

Примечание: Qt имеет фиксированное требование WebGL, в том числе для приложений, которые не используют WebGL напрямую. Браузеры часто заносят WebGL в черный список для старых / неподдерживаемых графических процессоров.

Встроенные платформы

Для поддержки встроенных платформ, включая Embedded Linux, INTEGRITY, QNX и VxWorks, обратитесь к документации Qt for Device Creation.

Эталонные конфигурации

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

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

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

Наличие пакетов

Вы можете загрузить установщики Qt 5 и пакеты с исходным кодом со страницы Загрузки. Для получения дополнительной информации посетите страницу «Начало работы с Qt».

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

Исключения

Отдельные модули могут быть доступны только на некоторых платформах или могут поддерживать не все конфигурации. Например, поскольку Qt WebEngine имеет Chromium в качестве сторонней зависимости, ограничения платформы или конфигурации восходящего потока также применяются к Qt WebEngine.

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

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

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

Заявление об отказе от ответственности

Обратите внимание, что Qt предлагается на условиях «как есть», без каких-либо гарантий и что наши продукты не свободны от ошибок или ошибок.В максимальной степени, разрешенной применимым законодательством, Компания Qt от имени себя и своих поставщиков отказывается от всех гарантий и условий, явных или подразумеваемых, включая, но не ограничиваясь, подразумеваемые гарантии товарной пригодности, пригодности для определенной цели, права собственности. и ненарушение прав в отношении Лицензионного программного обеспечения.

.

Как мне сообщить приложениям Qt5, какой плагин платформы использовать?

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд
.

python - Ошибка: не удалось найти или загрузить плагин платформы Qt "windows" - PyQt + Pyinstaller

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
.

Смотрите также