【问题标题】:Failed to load platform plugin "windows". Available platforms are : Error无法加载平台插件“windows”。可用平台是:错误
【发布时间】:2013-06-26 08:39:00
【问题描述】:

在 Visual Studio Qt 插件的帮助下,我使用 Visual Studio 2012 32 位和 Qt5 SDK 创建了 Qt 项目。我使用的是 Windows 7 终极版操作系统。

我创建了 QApplication GUI 项目,它基本上使用以下库:

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平台上运行?请帮我解决这个问题。

我已关注之前发布的有关此问题的链接。但他们都没有解决我的问题。我缺少什么配置?

【问题讨论】:

  • 不应该 qwindows.dll 位于 platform 文件夹中,而是与您的应用程序位于同一路径中?
  • 我已经把 qwindows.dll 正如你所说的那样。然后就解决了
  • 我面临同样的问题。您能否详细说明 qwindows.dll 应该保存在哪里?谢谢。
  • 使用windeployQt

标签: visual-studio qt qt5 visual-studio-addins


【解决方案1】:

需要将平台插件 dll 放入平台子文件夹中,然后才能工作。

【讨论】:

    【解决方案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 对象(或启动应用程序)添加参数。 例如,您想从 C:\test\platforms.dll 加载 qwindow.dll,您可以使用以下代码实例化 QApplication 对象:

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

      注意,QTCore dll不能进入目录C:\test(加载dll冲突)

      【讨论】:

        【解决方案4】:

        如果您指定的工作目录与可执行文件所在的目录不同,则无论插件是否存在,都会失败。

        因此,在这种情况下,请使用构建后事件复制您的文件。

        在:

        配置属性->调试->命令

        指定可执行文件的完整路径。

        这是在 VStudio 2008 上测试的。

        【讨论】:

          猜你喜欢
          • 2013-02-04
          • 2013-07-15
          • 1970-01-01
          • 1970-01-01
          • 2014-01-04
          • 2018-06-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多