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

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

Я создал проект 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 ]

Im получает ошибку:

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

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

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

Ответ 1

Плагины плагинов платформы должны быть помещены в подпапку платформ, а затем она будет работать.

Ответ 2

Еще одно решение: рано в вашей основной функции или что-то еще, вызовите 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... Но по какой-то причине мне не удалось заставить это работать. Возможно, я делаю какую-то простую ошибку, я не знаю.

Ответ 3

Другим решением является добавление аргументов к объекту 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)

Ответ 4

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

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

И в:

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

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

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