Не удалось загрузить окна плагинов платформы. Доступные платформы: Ошибка

Я создал проект Qt, используя 32-разрядную версию Visual Studio 2012 и Qt5 SDK с помощью дополнения Visual Studio Qt. Я использую ОС Windows 7 Ultimate.

Я создал проект GUI QApplication, который в основном использует следующие библиотеки:

qtmain.lib
Qt5Core.lib
Qt5Gui.lib
Qt5Network.lib
Ws2_32.lib
Winhttp.lib
Winmm.lib
Qt5Widgets.lib
Qt5PlatformSupport.lib
imm32.lib

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

Я пытаюсь запустить это приложение на тестовом компьютере с рабочим столом Windows 7, скопировав туда следующие DLL:

icudt51.dll
icuin51.dll
icuuc51.dll
libEGL.dll
libGLESv2.dll
Qt5Core.dll
Qt5Network.dll
Qt5GUI.dll
Qt5Widgets.dll
qwindows.dll [copied from msvc2012\plugins\platform folder ]

Я получаю сообщение об ошибке:

Не удалось загрузить плагин платформы «Windows». Доступные платформы: при попытке запустить приложение.

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

Я следил за ссылками, опубликованными об этой проблеме ранее. но ни один из них не решил мою проблему. Какой конфигурации мне не хватает?


person Raveendra M Pai    schedule 28.06.2013    source источник
comment
Разве qwindows.dll не должен находиться в папке platform, а не по тому же пути, что и ваше приложение?   -  person Zlatomir    schedule 28.06.2013
comment
Я поставил qwindows.dll, как ты сказал. тогда это решилось   -  person Raveendra M Pai    schedule 30.06.2013
comment
Я столкнулся с той же проблемой. Не могли бы вы уточнить, где следует хранить qwindows.dll? Спасибо.   -  person gaj    schedule 18.08.2015
comment
Используйте WindeployQt   -  person CrippledTable    schedule 12.01.2020


Ответы (4)


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

person lpapp    schedule 04.04.2014

Еще одно решение: в начале вашей основной функции или чего-то еще вызовите QCoreApplication::addLibraryPath(). Простой пример:

std::ifstream configurationStream("whateverNameYouWant.conf");
std::stringstream configurationText;
configurationText << configurationStream.rdbuf();
auto ct = configurationText.str();

if (!ct.empty())
    QCoreApplication::addLibraryPath(QString::fromStdString(ct));

Здесь я загружаю путь из файла .conf моего собственного изобретения, так что путь не будет жестко прописан в моей программе. Поскольку я изобрел этот файл, я контролирую его формат; в этом случае он не содержит ничего, кроме пути. Фактический путь, который я использую, это C:/qt5/qtbase/plugins; этот каталог содержит platforms/qwindows.dll и другие подобные файлы. Можно настроить пути для своего случая в зависимости от того, где установлены файлы Qt.

Я предполагаю также, что можно использовать стандартный файл qt.conf, используя формат, указанный Qt, для автоматической загрузки некоторых специальных путей (включая этот путь плагинов) без необходимости добавления специального кода в вашу собственную программу для этой цели: http://doc.qt.io/qt-5/qt-conf.html ...Но по какой-то причине мне никогда не удавалось заставить это работать. Может быть, я делаю какую-то простую ошибку, я не знаю.

person mjwach    schedule 03.07.2016

Другим решением является добавление аргументов к объекту QApplication (или к запускаемому приложению). Например, вы хотите загрузить qwindow.dll из C:\test\platforms.dll, вы можете создать экземпляр объекта QApplication со следующим кодом:

int ac = 4;
static char * av[] = {"myappli.exe","C:\\\\path\\to\\myappli.exe","-platformpluginpath","C:\\\\test"};
m_qApp = new QApplication(ac, av);

Будьте осторожны, dll QTCore не может находиться в каталоге C:\test (конфликт загрузки dll)

person Thibault T    schedule 26.03.2015

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

Итак, в этом случае скопируйте файл с событием после сборки.

И в:

Свойства конфигурации->Отладка->Команда

укажите полный путь к исполняемому файлу.

Это было проверено на VStudio 2008.

person Andres Hurtis    schedule 11.11.2017