Qt 5.1.1:应用程序无法启动,因为平台插件“窗口”丢失


编辑:有些人开始把我的问题标记为重复。 不要忘记,当我问到这个问题时,存在许多类似的问题(参见下面的列表)。 但是, 这些答案都没有解决我的问题 。 经过长时间的search,我发现一个被所有用户指向缺less的lib忽略的注释 。 现在,许多个月后,评论已被改为一个答案。 但是,当我自己回答这个问题时,我打算直接提供解决scheme来帮助别人。 这不应该被遗忘,到目前为止,我的回答帮助了很多人。 所以我的问题绝对不是重复的。 顺便说一句:在顶部提供的链接内接受的答案并不能解决问题


是的,我使用了search:

无法加载平台插件“窗口”。 可用的平台是:错误

从Visual Studio qwindows.dll错误部署Qt C ++应用程序

未能加载平台插件“窗口”可用的平台是:Windows,最小

但是,在我的情况下,问题仍然存在。 我在Visual Studio 2012中使用Qt 5.1.1,并使用Qt Creator 2.8.1在Windows 7上开发了我的应用程序。 应用程序以“Release”模式编译,如果直接使用Qt Creator启动,则可以执行。

但是,从“释放” – 文件夹开始,我得到以下消息:

此应用程序无法启动,因为它无法find或加载Qt平台插件“窗口”。 可用的平台插件是:最小化,屏幕外,窗口。

文件夹结构如下所示:

release + gui.exe + icudt51.dll + icuin51.dll + icuuc51.dll + libGLESv2.dll + Qt5Core.dll + Qt5Gui.dll + Qt5Widgets.dll + platforms 

平台是从Qt \ Qt5.1.1 \ 5.1.1 \ msvc2012 \ plugins \ platforms直接复制的文件夹,包括例如qwindows.dll。 如果我像其他用户一样将其重命名为“平台”,则无关紧要。 Qt仍然没有find“平台插件窗口”,我的错误在哪里?

好的,正如这里发布的https://stackoverflow.com/a/17271172/1458552没有太多其他用户的关注:;

libEGL.dll丢失了! 尽pipe在尝试启动应用程序时没有报告(所有其他* .dll,如Qt5Gui.dll已被报告)。

我在我的EXE位置旁边创build了一个平台目录,并把qwindows.dll放在里面,但是我还是收到了“无法加载平台插件”的窗口,可用的平台是:windows“错误。

我从C:\ Qt \ Qt5.1.1 \ Tools \ QtCreator \ bin \ plugins \ platforms复制了qwindows.dll,这不是正确的位置。 我查看了在Qt Creator中运行的debugging日志,发现我的应用在debugging器中运行时正在查看C:\ Qt \ Qt5.1.1 \ 5.1.1 \ mingw48_32 \ plugins \ platforms。

当我从C:\ Qt \ Qt5.1.1 \ 5.1.1 \ mingw48_32 \ plugins \ platforms复制时,一切正常。

QT_QPA_PLATFORM_PLUGIN_PATH环境variables设置为%QTDIR%\ plugins \ platforms \ 为我工作 。

这里和这里也提到了这 一点 。

我发现了一个意外的但直观的修复。 如果您将qwindows.dll复制并粘贴到您用来释放您的应用程序的任何编译器的bin中,您可以将该文件夹移动到与您的应用程序相同的目录中,并像魔术一样工作。

我遇到了这个问题,没有find解决这个问题的答案。

我的同事在他的机器上安装了Qt(5.6.0):C:\ Qt \ Qt5.6.0 \ 5.6 \ msvc2015 \ plugins
我有Qt(5.6.2)安装在相同的位置。

我从这篇文章中了解到: http : //www.tripleboot.org/? p=536,Qt5Core.dll在第一次安装Qt时就有一个写入到它的插件的位置。 由于我的同事和我的Qt目录是相同的,但安装了不同版本的Qt,所以需要不同的qwindows.dll文件。 当我运行一个由他部署的exe时,它会使用我的C:\ Qt \ Qt5.6.0 \ 5.6 \ msvc2015 \ plugins \ platforms \ qwindows.dll文件,而不是位于。\ platforms子文件夹中可执行文件旁边的文件。

为了解决这个问题,我在应用程序中添加了以下代码行,看起来在Qt5Core.dll中的path之前,似乎强制它在“平台”子文件夹的exe旁边查找。

 QCoreApplication::addLibraryPath("."); 

在QApplication调用之前,我将上面的代码行添加到main方法中:

 int main( int argc, char *argv[] ) { QCoreApplication::addLibraryPath("."); QApplication app( argc, argv ); ... return app.exec(); } 

在使用QT 5.6,Anaconda 4.3.23,python 3.5.2和pyinstaller 3.3时遇到了这个问题。 我创build了一个使用QTcreator开发的接口的Python程序,但必须将其部署到其他计算机上,因此我需要使用pyinstaller创build一个可执行文件。

我发现如果我设置了以下环境variables,我的电脑就解决了这个问题:

QT_QPA_PLATFORM_PLUGIN_PATH:%QTDIR%\ plugins \ platforms \

QTDIR:C:\ Miniconda3 \ pkgs \ qt-5.6.2-vc14_3 \ Library

但是这个解决scheme只能在我的PC上安装了conda和qt文件。

为了解决这个问题,并使可执行文件在任何计算机上工作,我必须编辑“.spec”(由pyinstaller首先生成的文件)以包含以下行:

datas = [('C:\ Miniconda3 \ pkgs \ qt-5.6.2-vc14_3 \ Library \ plugins \ platforms * .dll','platforms'),]

该解决scheme基于Jim G.和CrippledTable的答案

我find了另外一个解决 在应用程序文件夹中创buildqt.conf,如下所示:

 [Paths] Prefix = . 

然后将插件文件夹复制到应用程序文件夹,它适用于我。

对于MinGW平台,如果你正在编写一个手工编写的CMakeLists.txtdebugging目标,你需要将qwindows.dll添加到平台目录中。 windeployqt可执行文件能够很好地工作,但是出于一些奇怪的原因,CMake版本也需要发布版本。 总之,在您的平台目录中包含qwindows.dll和qwindowsd.dll会更好。 在QtCreator中导入CMake项目,然后运行构build过程时,我没有注意到相同的奇怪结果。 编译在命令行CMake项目似乎触发qwindows.dll依赖项,如果正确的debugging目标设置(qwindowsd.dll)