Qpa platform plugin windows

Qt Documentation

Contents

The Qt Platform Abstraction (QPA) is the platform abstraction layer for Qt 5 and replaces Qt for Embedded Linux and the platform ports from Qt 4.

QPA plugins are implemented by subclassing various QPlatform* classes. There are several root classes, such as QPlatformIntegration and QPlatformWindow for window system integration and QPlatformTheme for deeper platform theming and integration. QStyle is not a part of QPA.

There are no source or binary compatibility guarantees for the QPA classes, meaning that a platform plugin is only guaranteed to work with the Qt version it was developed against. API changes will however only be made in minor releases. (5.1, 5.2, and so on.)

QPA Minimal Plugins

There is no detailed tutorial documentation for writing QPA plugins at this time. However, there are two minimal plugins shipped with Qt 5 for testing and other special purposes that you can use as examples:

The qminimal plugin is used for tools that link against Qt GUI, but do not require window system integration (for example, qmlplugindump ). It also has diagnostic support for dumping window contents to image files as determined by environment variables.

Class Overview

  • QPlatformIntegration
    • QAbstractEventDispatcher
    • QPlatformAccessibility
    • QPlatformBackingStore
    • QPlatformClipboard
    • QPlatformCursor
    • QPlatformDrag
    • QPlatformFontDatabase
    • QPlatformGraphicsBuffer
    • QPlatformInputContext
    • QPlatformNativeInterface
    • QPlatformOffscreenSurface
    • QPlatformOpenGLContext
    • QPlatformScreen
    • QPlatformServices
    • QPlatformSharedGraphicsCache
    • QPlatformSurface
    • QPlatformWindow
  • QPlatformTheme
    • QPlatformDialogHelper
    • QPlatformMenu
    • QPlatformMenuBar
    • QPlatformMenuItem
    • QPlatformSystemTrayIcon
    • platform palettes
    • platform fonts
    • theme hints

qtbase/src/platformsupport contains several helper classes for implementing platform plugins on Unix-like systems.

QPA Plugins

The following table summarizes the platform plugins available for QPA:

Plugin Name Plugin Class Name Description
qandroid QAndroidPlatformIntegration Android support
qbsdfb QBsdFbIntegration BsdFb support
qcocoa QCocoaIntegrationPlugin Cocoa support
qdirect2d QWindowsDirect2DIntegrationPlugin Similar to the qwindows plugin, but replaces the raster paint engine with a Direct2D-based paint engine for QPixmap and QBackingStore.
qdirectfb QDirectFbIntegrationPlugin DirectFB is centered around surfaces, which are the equivalent of a QPaintDevice.
qeglfs QEglFSIntegrationPlugin EGLFS support for embedded Linux devices.
qhaiku QHaikuIntegration Haiku support
qios QIOSIntegrationPlugin iOS support
qlinuxfb QLinuxFbIntegrationPlugin LinuxFB support for embedded Linux devices.
qmirclient QMirClientIntegration Mir client support
qopenwf QOpenWFDIntegrationPlugin OpenWF Display support for managing display control hardware.
qqnx QQnxIntegrationPlugin QNX support
qvnc QVncIntegration VNC support
qwasm QWasmIntegration WebAssembly support
qwayland
  • QWaylandIntegrationPlugin
  • QWaylandBrcmEglPlatformIntegrationPlugin
  • QWaylandEglPlatformIntegrationPlugin
  • QWaylandXCompositeEglPlatformIntegrationPlugin
  • QWaylandXCompositeGlxPlatformIntegrationPlugin
Wayland support
qwindows QWindowsIntegrationPlugin Windows support
qwinrt QWinRTIntegrationPlugin Universal Windows Platform (UWP) support

Note: This plugin was originally written for WinRT (Windows Runtime), and is therefore called qwinrt .

qxcb QXcbIntegrationPlugin X Window System (X11) support webgl QWebGLIntegrationPlugin WebGL support for Qt Quick applications

В© 2021 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.

Приложение не удалось запустить, так как не удалось найти или загрузить плагин QT platform » windows»

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

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

  • Windows 7 Professional 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
  • .pri использует 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

(также терпит неудачу на a чистая установка Windows 7)

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

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

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

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

А затем еще ниже получаем the:

Есть идеи, как исправить эту проблему dll?

11 ответов:

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

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

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

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

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

Я скопировал папку platforms из Qt framework / plugins и скопировал ее в ту же папку, что и приложение. Теперь приложение вступило в силу также плагин / платформа / папка со всеми своими DLL

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

[пути]
Библиотеки=../lib / qtcreator
Plugins=Плагины
Импорт=импорт
Qml2Imports=qml

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

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

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

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

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

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

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

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

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

У меня была та же проблема «приложение не удалось запустить, потому что он не мог найти или загрузить Qt platform plugin» windows» Я исправил это, скопировав файлы ниже в приложение.папка exe (my app executable),

Qt5Core.dll, Qt5Gui.dll, Qt5Widgets.dll и каталог «платформ» с qminimal.проблемы, 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.ехе все свои .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\ to C:\QtHidden\ (это превращает ваш компьютер в чистую среду, точно так же, как тот, на котором не установлен Qt).
  4. Запуск C:\Deployment\MyApp.exe.

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

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

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

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

Я скопировал каждую dll из моего каталога qt в оба ./ и ./ платформы каталога моих приложений.

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

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

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

Это вернуло меня в то же состояние, в котором я был. первоначально.

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

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

У меня та же проблема.: 1. он может работать в VS2010; 2. он может работать в папке с файлами как: апп.exe \платформы\qwindows.файл DLL .

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

Решается простым перемещением папки платформы в плагины: апп.exe Плагины\платформы\qwindows.dll

Плюс: qwindows.DLL может быть переименован в любое вам нравится, как она запрашивается с помощью плагина interafce: qt_plugin_query_metadata ()

В нем отсутствуют qwindows.dll, которая обычно должна быть в платформах, если вы не добавляете:

Если вы этого не сделаете, кстати, и поставьте свои qwindows.dll где-то еще, Qt будет искать ваш путь для DLL, что может занять много времени (10s — несколько минут)!

Для меня, я должен был установить QT_QPA_PLATFORM_PLUGIN_PATH в каталог платформ, и тогда это сработало.

Как бы то ни было, это решение также было упомянуто на GitHub .

Попробовал все вышеперечисленное-оказалось, что для меня это было просто потому, что у меня не было основной библиотеки DLL Qt в папке apps

Читайте также:  У меня пиратская копия windows
Оцените статью