Ответ 1
Плагины плагинов платформы должны быть помещены в подпапку платформ, а затем она будет работать.
Я создал проект 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? Пожалуйста, помогите мне устранить эту проблему.
Я следил за ссылками, опубликованными об этой проблеме ранее. но ни одна из них не решила мою проблему. Какую конфигурацию мне не хватает?
Плагины плагинов платформы должны быть помещены в подпапку платформ, а затем она будет работать.
Еще одно решение: рано в вашей основной функции или что-то еще, вызовите 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... Но по какой-то причине мне не удалось заставить это работать. Возможно, я делаю какую-то простую ошибку, я не знаю.
Другим решением является добавление аргументов к объекту 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)
Если вы укажете рабочий каталог, отличный от того, где находится ваш исполняемый файл, независимо от того, где находятся плагины, он будет терпеть неудачу.
Итак, в этом случае скопируйте файл с событием post build.
И в:
Свойства конфигурации- > Отладка- > Команда
укажите полный путь к исполняемому файлу.
Это было протестировано на VStudio 2008.