QT平台dll应该去哪里?

时间:2013-05-30 18:21:30

标签: qt dll qt5

我创建了一个使用QTWebKit中的某些功能的DLL,然后我通过Java端的JNA访问。在我的机器上(显然安装了QT)它工作正常。当我将它移动到另一台机器来测试它没有安装qt时,我得到:

  

无法加载平台插件“windows”。可用的平台是:

我的google fu指出我需要包含平台DLL,即qwindows.dllqminimal.dll。根据{{​​3}}中的QT5文档,这听起来像部署可执行文件时,它将位于保存目录中名为platforms的文件夹中作为可执行文件。

  

与用户插件相比,必须插入Qt插件   子目录匹配插件类型。正如我们想要部署的那样   Windows平台插件必须放入“平台”   子目录。

这让我陷入困境。我有一个DLL,而不是可执行文件。所以我不知道放置平台文件夹的位置。我试图将它放在我正在执行我的测试应用程序的同一目录中,但这不起作用。

那么我在哪里放置平台目录以便QT能够找到它?

修改 由于我没有太多的反馈意见,也许有更好的方式来表达/处理这个问题。

如何告诉QT在哪里可以找到平台DLL?

似乎必须有办法实现这一目标。当我在我的机器上运行时,它最终会查看C:\Qt2\Qt5.0.2\5.0.2\msvc2012_64\plugins\platforms。所以似乎有m

2 个答案:

答案 0 :(得分:4)

我找到了两种可能的解决方案,您需要在DLL或库中创建QApplication(与具有exe的普通创建Qt应用程序基本不同)。

  1. 最简单的解决方案是将系统环境变量QT_QPA_PLATFORM设置为您希望platforms所在的文件夹。我不喜欢这个解决方案,担心它会干扰终端系统上安装的其他应用程序。

  2. 下一个解决方案是利用普通QT应用程序将使用的命令行参数。在正常的Qt应用程序QApplication将在您的主要创建类似于:

    int main(int argc, char *argv[]) {
       QApplication app(argc, argv);
    
       //other code
    
       return app.exec();
    }
    

    我们现在必须创建argvargc,所以请利用这个优势。

    char *argv[] = {"YourAppName","-platformpluginpath", "C:/your/path/to/dll/folder", NULL};
    int argc = sizeof(argv) / sizeof(char*) - 1;
    
    QApplication app(argc, argv);
    
  3. 注意:即使现在谷歌搜索-platformpluginpath我也找不到任何相关信息。或者有关QT可以使用的其他命令行参数的信息。我通过在寻找解决方案时深入研究QT源代码找到了它。因此,如果有人碰巧有一个包含该信息的资源的链接,那么用它来发表评论会很方便。

答案 1 :(得分:3)

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx#standard_search_order_for_desktop_applications

当您在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

希望有所帮助。祝你好运。