C++ Qt应用程序无法启动,因为找不到插件;“窗口”;目录

C++ Qt应用程序无法启动,因为找不到插件;“窗口”;目录,c++,qt,qt5,qtcore,qcoreapplication,C++,Qt,Qt5,Qtcore,Qcoreapplication,我知道有几个关于Qt问题的答案(比如这个)。我使用的是Qt5,但在其他版本中似乎也存在这个问题 被接受的答案不是我的问题,但是按照链接,将平台目录复制到可执行文件的解决方案可以很好地工作。然而,我觉得这个解决方案非常不令人满意,因为这意味着我必须在各地分发相同的目录。在项目中,我必须将它复制到我创建的每个项目的调试/发布分支中。运行designer.exe我也有这个问题,所以我也必须将它复制到那里,以此类推 将插件目录从我的QT安装目录放到路径中并没有解决问题,尽管我真的不明白为什么。显然,有一

我知道有几个关于Qt问题的答案(比如这个)。我使用的是Qt5,但在其他版本中似乎也存在这个问题

被接受的答案不是我的问题,但是按照链接,将平台目录复制到可执行文件的解决方案可以很好地工作。然而,我觉得这个解决方案非常不令人满意,因为这意味着我必须在各地分发相同的目录。在项目中,我必须将它复制到我创建的每个项目的调试/发布分支中。运行
designer.exe
我也有这个问题,所以我也必须将它复制到那里,以此类推

将插件目录从我的QT安装目录放到路径中并没有解决问题,尽管我真的不明白为什么。显然,有一些自定义代码加载所需的插件DLL


因此,我想知道是否有一些不可接受的方法可以正确地做到这一点,比如设置QT_HOME变量或类似的方法,这样我就不必到处复制DLL。

尝试使用QCoreApplication::addLibraryPath(插件文件夹路径)。

一般来说,自己构建QT是个坏主意,在这种情况下,它甚至不保证有一个静态构建。有几种方法可以解决此问题:

从文件中:

All Qt programs automatically support the following command line options:
\list

    \li \c{-platform} \e {platformName[:options]}, specifies the
        \l{Qt Platform Abstraction} (QPA) plugin.

        Overridden by the \c QT_QPA_PLATFORM environment variable.
    \li \c{-platformpluginpath} \e path, specifies the path to platform
        plugins.

        Overridden by the \c QT_QPA_PLATFORM_PLUGIN_PATH environment
        variable.

将路径前置到库路径列表的开头,确保首先在其中搜索库。如果路径为空或已在路径列表中,则不会更改路径列表

默认路径列表由一个条目组成,即插件的安装目录。插件的默认安装目录是INSTALL/plugins,其中INSTALL是安装Qt的目录

另请参见RemovelLibraryPath()、LibraryPath()和SetLibraryPath()


根据您的具体需求,这可以通过这样或那样的方式解决。

您是否尝试过静态链接您的程序?plugin/platform目录中的DLL似乎不作为静态版本存在。您必须重新编译Qt以生成LIB的静态版本。啊,我(目前)无法生成MySQL连接器,尽管Oracle连接器工作正常。我自己使用开源软件包构建了QT。据我所知,静态版本在默认情况下也应该是builkt,或者我必须重新配置吗?我强烈反对“通常自己构建Qt是个坏主意”的可能重复。这就是Qt的全部要点:您可以完全控制应用程序附带的内容,并且可以根据需要进行配置。我不太清楚“不保证”有一个静态构建意味着什么。这是一个受支持的配置选项。对于部署,我已经使用静态构建一年多了,我看不出有什么问题。通过积极的优化,它提供了占用更少虚拟内存、加载更快、运行更快的二进制文件。这是一个双赢的局面。因为存在二进制文件,所以在一般情况下构建Qt没有任何意义。此外,仅仅为了使用插件,静态构建是一个错误的想法。它将与官方版本配合使用。事实上,在嵌入式等设备上静态使用Qt也是不可接受的,您需要关注闪存大小,但这与使用插件是不同的。静态构建不保证插件加载。@LaszloPapp,如果插件真的以共享方式使用,我同意,最好使用它们。我必须验证你的解决方案,看看这是否是问题所在。我将QT移动到另一个目录,它似乎记住了安装前缀,所以这可能是它除了在本地路径中找不到插件的原因。我不同意“构建自己的坏主意”,因为这是开源项目的重点。能够做到这一点