Qt platform plugin windows что это

Не удалось запустить приложение, так как не удалось найти или загрузить плагин платформы QT & quot; windows & quot;

Я просмотрел все вопросы, связанные с переполнением стека, и ни одно из решений не помогло мне.

Я строю приложение Qt с этой настройкой:

  • Windows 7 Профессиональная x64
  • Visual Studio 2012
  • Qt 5.2.0 собран с configure -developer-build -debug-and-release -opensource -nomake examples -nomake tests -platform win32-msvc2012 -no-opengl
  • Проект использует QtSingleApplication (qt-solutions)
  • Приложение представляет собой 32-битное приложение
  • qmake запускается со следующим: -makefile -spec win32-msvc2012
  • .при использовании QMAKE_CXX += /D_USING_V110_SDK71_

Я могу нормально собирать и запускать свою программу на моей машине для разработки (отмечено выше); Я также могу установить и запустить пакет из каталога Program Files на компьютере разработчика.

Когда я устанавливаю и запускаю на компьютере с Windows Vista (несколько компьютеров)

  • VC ++ Redist 2012 11.0.61030.0 установлен
  • VC ++ Redist 2010 10.0.40219 установлен
  • плюс версии 2005, 2008 redist

(также не работает при чистой установке Windows 7)

Application failed to start because it could not find or load the QT platform plugin «windows»

Поэтому я следовал инструкциям и добавил каталог .platforms /, и добавил qwindows.dll (также добавили qminimal.dll и qoffscreen.dll); Я также добавил libEGL.dll, libGLESv2.dll (хотя я не нуждаюсь в них, я не думаю)

После того, как я добавил qoffscreen.dll, теперь я получаю дополнительное сообщение: Available platform plugins are: offscreen

Если я запускаю Dependency Walker, я получаю эту ошибку в списке:

а затем дальше вниз:

Любые идеи, как исправить эту проблему DLL?

Решение

Ошибка вызвана тем, что программа не может найти qwindows.dll

qwindows.dll должен быть в папке с именем platforms так что путь от вашего исполняемого файла до DLL platforms/qwindows.dll

Тогда как в моем случае этого было недостаточно. Я также должен был добавить следующую строку в начале моего main ()

Тогда все заработало.

Другие решения

Я получил эту проблему и как я решил ее:

Используется ходок зависимостей (http://www.dependencywalker.com/ ), чтобы увидеть точный путь необходимых DLL. Попробуйте, потому что и QtCreator, и QT framework имеют одинаковые dll, и вы должны точно указать, какие из них используются.
Я скопировал все необходимые библиотеки в ту же папку, что и приложение.

Я скопировал папку платформы из QT framework / plugins и скопировал ее в ту же папку, что и приложение. Теперь приложение содержит также плагин / платформа / папка со всеми своими библиотеками

И самый важный шаг в моем случае — это создать файл с именем qt.conf в той же папке, что и приложение. Этот файл должен содержать путь к плагинам. Мой файл qt.conf содержит:

[Путь] Библиотеки = .. / Библиотека / QtCreator
Плагины = плагины
Импорт = импорт
Qml2Imports = QML

Приложение может работать на хост-системе, так как Qt bin путь в системе PATH переменная.

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

Этот инструмент заботится о зависимостях Qt DLL, делает копию platforms\qwindows.dll а также делает копию библиотек, которые вы не можете обнаружить с помощью Зависимость Уокер, так как подключаемые модули изображений и некоторые другие библиотеки DLL загружаются во время выполнения.

Вам даже не нужно иметь свой Qt bin папка в вашей среде PATH , Самое простое развертывание:

  • копия построена exe бинарный в новую папку
  • открыть cmd консоль в этой папке
  • вызов windeployqt используя полный путь (если его нет в системе PATH ) и укажите свой исполняемый файл, например:

В результате у вас есть в этой папке все необходимые библиотеки Qt DLL для запуска приложения.

Инструмент windeployqt имеет различные варианты. Он также может позаботиться о развертывании qml связанные файлы.

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

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

У меня была та же проблема: «Приложение не удалось запустить, потому что оно не могло найти или загрузить плагин платформы QT». «Окна». Я исправил это, скопировав следующие файлы в папку app.exe (исполняемый файл моего приложения),

Qt5Core.dll, Qt5Gui.dll, Qt5Widgets.dll и каталог «платформы» с qminimal.dll, qoffscreen.dll, qwindows.dll.

Я надеюсь, что это поможет кому-то

Обратите внимание, что эта проблема может также быть вызвано, если путь поиска qwindows.dll который закодирован в вашем приложении, включает путь, по которому вы установили Qt. Рассмотрим следующий сценарий:

  1. Я устанавливаю Qt в c:\Qt\.
  2. Я разрабатываю приложение и правильно разверну его где-то еще.
  3. Он работает на любом компьютере правильно, потому что он включает в себя qwindows.dll в подкаталоге.
  4. Я обновляю свой локальный Qt до новой версии.
  5. Я пытаюсь снова запустить свое приложение.

Результатом является эта ошибка, потому что qwindows.dll в c:\Qt\. найден до тот в его локальном каталоге, и это несовместимо с этим. Очень надоедливый.

Решение состоит в том, чтобы разместить файл qt.conf в той же директории, что и ваш exe-файл. Я не знаю, как этого избежать. Если вы использовали инструмент windeployqt.exe для развертывания приложения, поэтому у вас есть подкаталог с именем platforms тогда этого достаточно:

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

Выполните все шаги в Первоначальном развертывании (Быстрое и грязное) [http://wiki.qt.io/Deploy_an_Application_on_Windows]

  1. Закройте Qt Creator.
  2. Скопируйте следующее в C: \ Deployment \ Выпускная версия MyApp.exe Все файлы .dll из
    C: \ Qt \ 5.2.1 \ mingw48_32 \ bin \ Все папки из
    C: \ Qt \ 5.2.1 \ mingw48_32 \ Plugins \
  3. (Если вы использовали QML) Все папки из C: \ Qt \ 5.2.1 \ mingw48_32 \ qml \ Переименуйте C: \ Qt \ в C: \ QtHidden \ (Это превращает ваш компьютер в чистую среду, такую ​​же, как не установлена ​​Qt).
  4. Запустите C: \ Deployment \ MyApp.exe.

Теперь для взлома —

  1. Дублируйте вашу папку для безопасности
  2. Если ваш файл был в / cat / Deployment, перейдите в / cat
  3. Теперь удалите папку развертывания, пока EXE-файл все еще работает.
  4. Он скажет вам, что он не может удалить определенные файлы, так что пропустите (или пропустите все)
  5. То, что у вас осталось, это список всех файлов .dll, которые ваш .exe фактически использовал и не мог удалить: список всех файлов и только те файлы, которые вам нужно сохранить.

Вы можете закрыть файл .exe сейчас.
Чтобы проверить, нормально ли оно разворачивается, перейдите в папку, где вы его установили, скажем, C: / Qt и переименуйте его в C: / NotQt (в основном, делает Qt невидимым для системы).
Если он работает сейчас, он будет развертываться в других системах чаще, чем нет.

Ну, я решил свою проблему, хотя я не уверен, в чем разница:

Я скопировал каждую DLL из моего каталога qt в ./ и ./platforms моего каталога приложения.

Приложение прошло ошибку, но затем потерпело крах.

VERSION.dll вызывал сбой (отмеченный в обходчике зависимостей), поэтому я удалил его из обоих мест.

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

Это вернуло меня в прежнее состояние.

Затем я удалил свое приложение и переустановил (оставив только файл ./platforms/qwindows.dll), приложение работает правильно.

Таким образом, все, что я могу предположить, — то, что у меня была неправильная версия qwindows.dll в каталоге платформ.

Я получил ту же проблему:
1. он может работать в VS2010;
2. он может работать в папке с файлами как:
app.exe
\ Платформы \ qwindows.dll

  1. но он не смог загрузить qwindows на чистую машину с той же ОС, что и у разрабатываемой.

Начало работы с Qt в Windows

Полагаю, ты уже слышал что такое Qt и планируешь начать его изучение, но не знаешь с чего начать? Тогда ты зашел по правильному адресу! 🤗

Загрузка установочного пакета Qt

Начнем с установки. Скачать Qt для Windows можно на официальном сайте

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

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

Все статьи на данном канале будут построены с использованием Qt версии 5.14 — последней версии, доступной для установки в offline-режиме, это самый удобный вариант для обучения.

Скачиваем установочный файл qt-opensource-windows-x86-5.14.2.exe ( ссылка ) и запускаем.

Запуск установочного пакета

С некоторых пор все официальные установочные пакеты Qt требуют завести учетную запись «Qt Account». Подтверждать введенные данные не нужно, но лучше все же указывать реальную почту.

Однако, есть лазейка для обхода этого экрана (проверено только в версии 5.14):

  1. Вводим несуществующие логин-пароль в поле Please log in to Qt Account , нажимаем « Next », дожидаемся ответа с ошибкой и очищаем поля ввода.
  2. Нажимаем кнопку « Назад » вверху слева, а затем снова кнопку « Next » и попадаем на экран выбора пути установки.

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

Выбор компонентов и комплекта установки

Qt — модульная библиотека и установочный пакет предлагает выбрать какие именно модули требуется установить.

Помимо компонентов (таких как Qt Charts, Qt WebEngine и др.) предлагается выбрать комплект установки: Qt для MSVC 2015/2017 32/64-bit , Qt для MinGW 32/64 bit , Qt для UWP и т.д. Все эти комплекты отличаются компилятором, которым они были скомпилированы и на работу с которым они рассчитаны.

Статьи на данном канале будут описывать базовые принципы работы с Qt при использовании компилятора MinGW . Использование данного компилятора позволит сэкономить время и место на диске, т.к. его установка не требует особых затрат, сам MinGW доступен прямо из коробки Qt, а выпуск приложения будет намного проще и не будет привязан к таким пакетам и библиотекам Microsoft, как MSVCR и MSVCP (распространяемый пакет Microsoft). Никаких ограничений при этом в разработке не возникнет, кроме одного: в версии MinGW будет невозможно воспользоваться встроенным движком для отображения web-страниц Chromium .

Обратите внимание!
При выборе комплекта Qt для MSVC 2015/2017 32/64-bit или Qt для UWP, вам дополнительно потребуется обязательная установка соответствующего компилятора из набора Microsoft Build Tools (Microsoft Visual C++ или MS for Universal Platform), а так же пакет Windows SDK — это примерно 15-20 гигабайт на жестком диске. Именно поэтому для начала предлагается поработать с версией для MinGW , которая занимает всего примерно 400-450 МБ на жестком диске.

Кстати говоря
Самым значительным отличием между комплектами Qt является то, что от выбранного комплекта будет зависеть набор доступных модулей. Например, вы не сможете собирать приложения с использованием браузерного движка Chromium в версии для MinGW, потому что библиотека cef (Chromium Embedded Framework) не поддерживает компиляцию в Windows компилятором MinGW.
Однако, если взять более старые версии Qt, например 5.5 и ранее, можно задействовать браузерный движок на основе библиотеки WebKit.

Я выделил 3 основных компонента, которые пригодятся нам для обучения. Хочу заметить, что на своё усмотрение вы можете выбрать между 32-bit версией и 64-bit версией, а так же можете установить их обе. Для обучения и тестирования будет вполне достаточно одной любой версии, наиболее универсальной будет версия для 32-битных систем.

Интересный факт!
64-битная версия компилятора MinGW впервые стала доступна в Qt только в 2020 году! До этого в Qt использовалась очень «древняя» версия MinGW для 32-битных систем, но это никак не сказывалось на качестве создаваемых программ.

На завершающем этапе соглашаемся с лицензионной политикой Qt и нажимаем кнопку « Установить ».

Вместе с библиотекой Qt устанавливается очень важный компонент экосистемы Qt: среда для программирования на языке C++ (IDE) — QtCreator . Именно в ней мы будем работать в дальнейшем.

Qt 5.1 и корректный deployment в Windows

Добрый день!
Для меня он вышел не очень добрым, 10 часов из жизни потрачено в поисках решения на простой вопрос, но в конечном счете я его нашел, и сейчас поделюсь с вами.
Итак, краткая предыстория.
Один мой заказчик попросил разработать kiosk-mode приложение на Qt. И для начала, сделать версию для POS-терминала с ОС Windows XP.
Ok, за неделю я что-то сверстал по приложенным макетам и попробовал отдать версию заказчику. Приложив Qt5Core.dll, Qt5Gui.dll, ну и прочие .dll используемых модулей Qt.
«Failed to load platform plugin „windows“» сказала японскаяфинская бензопила.

Ага, идем в гугл.
Во-первых, официальная документация:
qt-project.org/doc/qt-5.0/qtdoc/deployment-windows.html
Она не очень помогла, пошел читать форумы на qt-project.org. Вот предлагаемые решения:
1) скопировать /qtbase/plugins/platforms/qwindows.dll в папку приложения в каталог platforms или platform
попробовал, не работает
2) скопировать /qtbase/plugins/platforms/qwindows.dll в папку приложения в каталог plugins/platforms, plugins/platform
не работает
3) выставить переменную окружения QT_QPA_PLATFORM_PLUGIN_PATH, указать в ней путь до папки с qwindows.dll
заработало. Но: я не хочу модифицировать переменные среды при установке на компьютер пользователя. Во-первых, пользователь может удалить ее — а так как приложение падает при загрузке, проверить ее наличие я даже и не смогу без костылей. Во-вторых, пользователь может установить приложение с другой версией Qt — и привет, глюки и несовместимости.
4) решение из официальной документации. При инициализации приложения в функции main() добавить строчку вида:

qApp это наш QApplication. Не заработало.
5) использовать аргумент командной строки «-platformpluginpath \«путь_к_папке_с_qwindows.dll\»»
проверил. работает. Вуаля! Вот решение! (что оказалось неправдой)

Правим скрипт innosetup, вот так:

отдаем заказчику, радуемся.
Рано радуемся, не работает sqlite. подкладывание в plugins\sqldrivers, просто sqldrivers не помогло — не видит и не загружает, вот такой код:

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

Вот такой код наконец работает:

Кстати, встречал еще вот такой способ задания пути:

но он работает некорректно, так как QCoreApplication::applicationDirPath() выдает warning, если экземпляр QApplication еще не создан.

И собственно секция «Files» в InnoSetup выглядит так:

Статья не претендует на всеобъемлющее исследование, но корректного работающего решения я не нашел и поэтому решил опубликовать свое.
Спасибо за внимание!

Читайте также:  Аналог dreamweaver для windows
Оцените статью