在Qt中,使用不在源目录中的资源

时间:2018-06-26 22:25:36

标签: qt

我需要使用来自几个不同程序(图像,字体,txt文件等)的一组资源。所以我把它们放在一个普通文件夹中。因此,我尝试使用此路径读取以下txt文件之一:

":/../../CommonClasses/PNGWriter/report_text/English"

但是,这不能正常工作,因为无法打开QFile来读取此路径。

但是,如果我将report_text目录移动到源目录并使用此路径,则为

":/report_text/English"

然后一切正常。

所以我的问题是,用户资源是否可能不在源目录中?

编辑:

这是我的.qrc源文件(我用资源文件中的实际文件替换了stuff.txt)

<RCC>
    <qresource prefix="/">
        <file>../../CommonClasses/PNGWriter/report_text/English</file>
        <file>../../CommonClasses/PNGWriter/report_text/GothamBlackRegular.otf</file>
        <file>../../CommonClasses/PNGWriter/report_text/GothamBold.otf</file>
        <file>../../CommonClasses/PNGWriter/report_text/GothamBook.otf</file>
        <file>../../CommonClasses/PNGWriter/report_text/GothamLight.otf</file>
        <file>../../CommonClasses/PNGWriter/report_text/GothamMedium.otf</file>
        <file>../../CommonClasses/PNGWriter/report_text/Spanish</file>
        <file>../../CommonClasses/PNGWriter/report_text/viewmind.png</file>
    </qresource>
</RCC>

3 个答案:

答案 0 :(得分:1)

alias关键字对于在资源系统中给事物起一个不同的名称很有用。

代替

<file>../../CommonClasses/PNGWriter/report_text/viewmind.png</file>

你会写

<file alias="report_text/viewmind.png">../../CommonClasses/PNGWriter/report_text/viewmind.png</file>

当然,如果您手动维护大型qrc文件,这会有些麻烦;自动化它们的(脚本)生产可能会有用。

答案 1 :(得分:0)

我不认为这是一个本机选项,因为当我尝试在项目子目录上方添加文件时,我会使用复制选项得到"The file "/path/to/file/" is not in a subdirectory of the resource file. You now have the option to copy this file to a valid location."

但是,(如果在Linux上)在项目子目录中的资源文件中添加符号链接对我来说效果很好。因此,类似ln -s /path/to/target/resource /path/to/project/directory/resource_name.file的东西,然后将resource_name.file添加到资源文件中应该可以工作。它是在我的(Qt 5.7)上实现的。

答案 2 :(得分:0)

感谢友善的小贴士@timday,我设法看到了问题所在。我使用的../../是问题所在。该文件的路径实际上是:

:/CommonClasses/PNGWriter/report_text/English

现在它可以按预期运行!!我希望这对其他人有帮助!