我在Visual studio Qt插件的帮助下,使用Visual studio 2012 32位和Qt5 SDK创建了Qt项目。我使用的是Windows7终极操作系统。
我创建了QApplication GUI项目,它基本上使用以下库:
qtmain.lib
Qt5Core.lib
Qt5Gui.lib
Qt5Network.lib
Ws2_32.lib
Winhttp.lib
Winmm.lib
Qt5Widgets.lib
Qt5PlatformSupport.lib
imm32.lib
我已经成功地构建了应用程序二进制文件,没有任何错误。
我正试图在测试机windows7桌面上运行这个应用程序,并在那里复制了以下dll:
icudt51.dll
icuin51.dll
icuuc51.dll
libEGL.dll
libGLESv2.dll
Qt5Core.dll
Qt5Network.dll
Qt5GUI.dll
Qt5Widgets.dll
qwindows.dll [copied from msvc2012pluginsplatform folder ]
我得到错误:
未能加载平台插件"windows"。可用平台为:尝试运行应用程序时。
我会错过什么?如何使它在windows平台上运行?请帮助我解决此问题。
我已经关注了之前发布的关于这个问题的链接。但没有一个能解决我的问题。我缺少什么配置?
平台插件dll需要放入平台子文件夹中,然后才能工作。
还有一个解决方案:在主函数或其他函数的早期,调用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
;该目录包含CCD_ 2和其他这样的文件。人们可以根据自己的Qt文件的安装位置来调整自己的路径。
我想也应该可以使用标准的qt.conf
文件,使用Qt指定的格式,自动加载一些特殊路径(包括这个插件路径),而不必为此目的向自己的程序添加特殊代码:http://doc.qt.io/qt-5/qt-conf.html。。。但无论出于什么原因,我都没能做到这一点。也许我犯了一个简单的错误,我不知道。
另一个解决方案是向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冲突)
如果指定的工作目录与可执行文件所在的目录不同,那么无论插件在哪里,它都会失败。
因此,在这种情况下,使用构建后事件复制文件。
并且在:
配置属性->调试->命令
指定可执行文件的完整路径。
这在VStudio 2008上进行了测试。