-1

我想在我的新项目中使用 Qt。我的目标编译器(VS2010 64 位)的安装程序不存在。

我正在使用带有 Qt 5.1.1 的 Windows 7 64 位。

我的一位同事也计划使用 Qt,并设法为我的目标编译器(他也使用)编译它。他已经在某个目录中构建了它,比如 DirA。他慷慨地给了我一份他的整个 Qt SDK 构建(二进制文件、示例、头文件和所有内容)的副本,我将它复制到我机器上的 DirB。

我在 DirB 中需要它,因为这是我所有 3rd 方库的安装位置,而且我的 CMake 脚本知道如何找到它们。我还将 Qt bin 文件夹添加到我的路径中。

问题接踵而至。出于某种原因,Qt 二进制文件在其中硬编码了安装路径(在本例中为构建路径)。因此,即使 Qt bin 文件夹在我的路径中(因此找到了 DLL),Qt 的 DLL 正在寻找 Windows“插件”的错误位置。他们正在寻找我的机器上不存在的 DirA。

因此,根据我的研究发现,使用指定安装路径根目录的 qt.conf 文件应该是可行的方法。我在我的 Qt bin 目录中添加了一个,现在 Qt 二进制文件(助手、qmake 等)可以运行。

但现在我建立了一个例子。构建良好。运行 exe,加载 Qt DLL,然后由于找不到插件目录而崩溃。

我的同事和我发现似乎可行的解决方法是将我的 qt.conf 文件复制到我的 exe 所在的目录中。之后,exe 运行。

但这似乎不对。我的 exe 可以找到 Qt DLL,但它加载的 Qt DLL 找不到 qt.conf。他们不知道查看自己的包含文件夹。我的工作目录(我的 exe 目录)中必须有 qt.conf 才能找到和使用它。

有谁知道为什么会发生这种情况,并且知道一种方法让我不被迫在我的 exe 目录中有一个 qt.conf 文件?我不能接受这需要重建 Qt。一定有别的办法。

4

1 回答 1

1

您可以将 qt.conf放入您的二进制文件中。使用资源系统。

来自 Qt 文档:

如果没有 qt.conf,Qt 库将使用硬编码路径来查找插件、翻译等。这些路径在目标系统上可能不存在,或者它们可能不可访问。因此,您需要 qt.conf 使 Qt 库在别处查找。

QLibraryInfo 将从以下位置之一加载 qt.conf:

:/qt/etc/qt.conf using the resource system

或者:

使用QApplication::addLibraryPath()QApplication::setLibraryPaths()。如果您只有一个将使用该插件的可执行文件,则建议使用此方法。

如果您使用 QApplication::addLibraryPath 添加自定义路径,它可能如下所示:

qApp->addLibraryPath("C:/customPath/plugins");

于 2013-09-03T22:26:21.077 回答