Qt 5.1.1:应用程序无法启动,因为缺少平台插件"windows"

Ano*_*ous 114 c++ windows qt visual-studio-2012


编辑: 有些人开始将我的问题标记为重复.当我问这个问题时,不要忘记存在许多类似的问题(参见下面的列表).但是,这些答案都没有解决我的问题.经过长时间的搜索后,我发现了一条评论,该评论被指向缺少的lib的所有用户忽略.现在,几个月后,评论已经改为答案.然而,当我自己回答这个问题时,我打算通过直接提供解决方案来帮助其他人.这不应该被遗忘,到目前为止,我的答案帮助了很多人.因此,我的问题绝对不是重复的. 顺便说一句:在顶部提供的链接中接受的答案并不能解决问题!


是的,我使用了搜索:

无法加载平台插件"windows".可用平台有:错误

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

无法加载平台插件"windows"可用平台是:windows,minimal

但是,就我而言,问题仍然存在.我正在使用Qt 5.1.1与Visual Studio 2012,并使用Qt Creator 2.8.1在Windows 7上开发我的应用程序.应用程序以"Release"模式编译,如果直接使用Qt Creator启动,则可以执行.

但是,当从"release"-Folder开始时,我收到以下消息:

此应用程序无法启动,因为它无法找到或加载Qt平台插件"windows".可用的平台插件有:最小,屏幕外,窗户.

文件夹结构如下所示:

release
+ gui.exe
+ icudt51.dll
+ icuin51.dll
+ icuuc51.dll
+ libGLESv2.dll
+ Qt5Core.dll
+ Qt5Gui.dll
+ Qt5Widgets.dll
+ platforms
Run Code Online (Sandbox Code Playgroud)

平台是直接从Qt\Qt5.1.1\5.1.1\msvc2012\plugins\platforms复制的文件夹,包括例如qwindows.dll.如果我像其他一些用户那样将其重命名为"平台"并不重要.Qt仍然没有找到"平台插件窗口",我的错误在哪里?

Ano*_*ous 63

好的,发布在这里/sf/answers/1208982071/没有得到其他用户的太多关注:

libEGL.dll失踪了!尽管在尝试启动应用程序时尚未报告此问题(已报告所有其他*.dll,例如Qt5Gui.dll).

  • 添加libEGL.dll没有用.但是,设置以下环境变量对我有用:QT_QPA_PLATFORM_PLUGIN_PATH =%QTDIR%\ plugins\platforms \ (16认同)
  • 你是怎么知道丢失的dll是libEGL的? (8认同)
  • 你节省了我的时间!在Qt 5.3.1上遇到同样的问题 (4认同)
  • @ user1493046我设法使用*depends*及其分析模式(F7)重现这个.应用程序启动并显示错误后,libEGL.dll出现在依赖项列表中. (4认同)
  • 就我而言:Qt\Qt5.1.1\5.1.1\msvc2012\bin(当然取决于你的 Visual Studio 版本) (2认同)

小智 35

我在我的exe位置旁边创建了一个平台目录并将qwindows.dll放入其中,但我仍然收到"无法加载平台插件"窗口".可用平台是:windows"错误.

我从C:\ Qt\Qt5.1.1\Tools\QtCreator\bin\plugins\platforms复制了qwindows.dll,这不是正确的位置.我查看了在Qt Creator中运行的调试日志,发现我的应用程序在调试器中运行时正在查看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 =%QTDIR%\ plugins\platforms \ (38认同)

Cri*_*ble 21

我发现了一个意外但直观的修复.如果您将用于发布应用程序的编辑器的bin中的qwindows.dll复制并粘贴到名为"platforms"的文件夹中,则可以将该文件夹移动到与应用程序相同的目录中,就像魔术一样.

另外一个有用的提示,Qt附带平台控制台应用程序,它将所有依赖项(包括qwindows.dll和libEGL.dll等)添加到已部署的可执行文件的文件夹中.windows的应用程序称为windeployqt,文档可以在http://doc.qt.io/qt-5/windows-deployment.html找到.这个应用程序为我节省了很多时间,这是部署可执行文件的正确方法,以免遗漏任何内容.

  • 这就是我需要的:注意,qwindows.dll 不在 Qt 平台安装的 bin/ 中,而是在 plugins/platforms/ 中,plugins/ 与 bin/ 位于同一目录中 (3认同)
  • windeployqt 是正确的答案。我使用了它,它复制了 .exe 旁边需要的所有内容。它消除了知道哪些 dll 需要哪些不需要的猜测 (2认同)

Jim*_* G. 13

QT_QPA_PLATFORM_PLUGIN_PATH环境变量设置为%QTDIR%\ plugins\platforms\为我工作.

这里这里也提到.

  • 虽然这个答案可能会使它在您当前的机器上运行,但它并没有帮助那些试图将程序部署到其他机器并且需要专门识别缺少/需要哪些库的人. (3认同)

Joe*_*oel 7

我碰到了这个,我找不到任何答案.

我的同事在他的机器上安装了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中的路径之前,似乎强制它在"平台"子文件夹的exe旁边查看.

QCoreApplication::addLibraryPath(".");
Run Code Online (Sandbox Code Playgroud)

我在QApplication调用之前将上面的行添加到main方法中,如下所示:

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


Pet*_*ing 6

我找到了另一个解决方案。在 app 文件夹中创建 qt.conf 如下:

[Paths]
Prefix = .
Run Code Online (Sandbox Code Playgroud)

然后将 plugins 文件夹复制到 app 文件夹中,它对我有用。


Kun*_*Xie 6

创建目录platforms 并复制qwindows.dll到该目录,platformsapp.exe位于同一目录中

cd app_dir mkdir platforms xcopy qwindows.dll platforms\qwindows.dll

资料夹结构 + app.exe + platforms\qwindows.dll


Yah*_*wil 5

对于使用 QT 5.14.0 版本的人来说,我花了 2 天时间才找到这个 bug 声明:

Windeployqt 不适用于 MinGW QTBUG-80763 将在 5.14.1 中修复

https://wiki.qt.io/Qt_5.14.0_Known_Issues

所以要注意。将 Windeployqt 与 MinGW 一起使用将给出此处所述的相同错误。