我创建了一个使用QTWebKit中的某些功能的DLL,然后我通过Java端的JNA访问。在我的机器上(显然安装了QT)它工作正常。当我将它移动到另一台机器来测试它没有安装qt时,我得到:
无法加载平台插件“windows”。可用的平台是:
我的google fu指出我需要包含平台DLL,即qwindows.dll
和qminimal.dll
。根据{{3}}中的QT5文档,这听起来像部署可执行文件时,它将位于保存目录中名为platforms
的文件夹中作为可执行文件。
与用户插件相比,必须插入Qt插件 子目录匹配插件类型。正如我们想要部署的那样 Windows平台插件必须放入“平台” 子目录。
这让我陷入困境。我有一个DLL,而不是可执行文件。所以我不知道放置平台文件夹的位置。我试图将它放在我正在执行我的测试应用程序的同一目录中,但这不起作用。
那么我在哪里放置平台目录以便QT能够找到它?
修改 由于我没有太多的反馈意见,也许有更好的方式来表达/处理这个问题。
如何告诉QT在哪里可以找到平台DLL?
似乎必须有办法实现这一目标。当我在我的机器上运行时,它最终会查看C:\Qt2\Qt5.0.2\5.0.2\msvc2012_64\plugins\platforms
。所以似乎有m
答案 0 :(得分:4)
我找到了两种可能的解决方案,您需要在DLL或库中创建QApplication
(与具有exe的普通创建Qt应用程序基本不同)。
最简单的解决方案是将系统环境变量QT_QPA_PLATFORM
设置为您希望platforms
所在的文件夹。我不喜欢这个解决方案,担心它会干扰终端系统上安装的其他应用程序。
下一个解决方案是利用普通QT应用程序将使用的命令行参数。在正常的Qt应用程序QApplication
将在您的主要创建类似于:
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
//other code
return app.exec();
}
我们现在必须创建argv
和argc
,所以请利用这个优势。
char *argv[] = {"YourAppName","-platformpluginpath", "C:/your/path/to/dll/folder", NULL};
int argc = sizeof(argv) / sizeof(char*) - 1;
QApplication app(argc, argv);
注意:即使现在谷歌搜索-platformpluginpath
我也找不到任何相关信息。或者有关QT可以使用的其他命令行参数的信息。我通过在寻找解决方案时深入研究QT源代码找到了它。因此,如果有人碰巧有一个包含该信息的资源的链接,那么用它来发表评论会很方便。
答案 1 :(得分:3)
当您在Qt中运行程序时,它会调整环境变量以在您的路径中添加一些内容。
你的dll在运行时所知道的默认“路径”取决于加载它的exe及其工作目录,应用程序目录等。如果你测试正在加载你的dll的程序,那么与dll相同的文件夹,您可能只需将qwindows.dll
放入“./platforms /".
您还应该检查此功能:
http://qt-project.org/doc/qt-4.8/qcoreapplication.html#setLibraryPaths
http://qt-project.org/doc/qt-4.8/qcoreapplication.html#libraryPaths
希望有所帮助。祝你好运。