我想在我的新项目中使用Qt。我的目标编译器(VS2010 64位)的安装程序不存在。
我使用的是Windows 7 64位和Qt 5.1.1。
我的一位同事也计划使用Qt,并设法为我的目标编译器编译它(他也使用它)。 DirA说,他已将它建在某个目录中。他慷慨地给了我一份他整个Qt SDK构建的副本(二进制文件,示例,标题和所有内容),然后我将它复制到我的机器上的DirB。
我在DirB中需要它,因为这是我所有第三方库的安装位置,而我的CMake脚本知道如何找到它们。我还在我的路径中添加了Qt bin文件夹。
随之而来的问题。由于某些原因,Qt二进制文件的安装路径(在这种情况下是构建路径)在其中进行了硬编码。因此即使Qt bin文件夹在我的路径中(因此找到了DLL),Qt的DLL也在寻找Windows“插件”的错误位置。他们正在寻找我的机器上不存在的DirA。
因此,根据我发现的研究,使用指定安装路径root的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。必须有其他方式。
答案 0 :(得分:1)
您可以将qt.conf 放入二进制文件中。使用资源系统。
来自Qt docs:
如果没有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 /插件”);