QFile.open 无法打开资源 qrc 中的文件

Posted

技术标签:

【中文标题】QFile.open 无法打开资源 qrc 中的文件【英文标题】:QFile.open fails to open a file inside resource qrc 【发布时间】:2017-10-30 14:26:03 【问题描述】:

我遇到了一个奇怪的问题,QFile.open 无法打开添加到 qrc 资源文件中的文件。我的 qrc 文件是这样的

我正在使用以下代码来读取文件 theme_normal.qss

QFile file(":/styles/theme_normal.qss");

if (file.open(QIODevice::ReadOnly | QIODevice::Text))

    QString style(file.readAll());
    file.close();

else

    QMessageBox::critical(nullptr, "Error", "Error loading style file: " +  file.errorString());

我收到以下错误:没有这样的文件或目录

相同的代码(原样)在 Qt 5.7.0 中运行良好。我正面临 Qt 5.9.2 的上述问题。可能是什么原因?

我的示例项目:https://github.com/warunanc/QtFileFromResources

【问题讨论】:

您是否打算使用“/styles”文件夹名称而不仅仅是“styles”? 你尝试过替代语法吗(没关系)... qrc:///styles/theme_normal.qss 我已经在 Qt 5.9.2 中尝试过了,它工作正常。 我建议重新安装 Qt。 @scopchanov 不。我放弃。回到 5.7.0。也许全新安装会起作用。 【参考方案1】:

在我的类似情况下,从应用程序目录(系统:Windows 10)中删除所有 Qt DLL 文件并复制新的 DLL 文件后问题得到解决。

我发现在 5.9 中不再有例如 Qt5CLucened.dll。可能的问题出在过时的 Qt5CLucened.dll 文件中

【讨论】:

这很可能是原因。我试试这个【参考方案2】:

万一有人有类似情况。

我的环境:ubuntu 16.04 LTS,Qt 5.9.4。

我试过了:

    重启系统。

    重启 Qt 创建器

    清理项目,构建 qmake 并重建项目

    已更改 qrc 前缀

    去掉qrc的目标文件,重新添加

没有任何帮助。

最后,我删除了 qrc 并添加了一个具有相同名称和相同文件的新 qrc,并删除了 build 文件夹中旧的 qrc_xxx.cpp 和 qrc_xxx.o,它也没有帮助。

但是,我删除qrc并添加一个不同名称的新qrc,这样,旧的qrc命名为res.qrc,新的qrc命名为res1.qrc,然后构建qmake并构建项目,它很好用!!!

我不知道为什么,也许是一些旧的缓存?这需要我很长时间..):

编辑: 我发现原因是如果你在.pro中使用SUBDIRS并且有两个项目具有相同的名称qrc,你会遇到这个问题。

【讨论】:

以上是关于QFile.open 无法打开资源 qrc 中的文件的主要内容,如果未能解决你的问题,请参考以下文章

Qt qrc 资源文件 - 无法加载图标

如何获取存储在 .qrc Qt 资源文件中的文件列表?

当我尝试播放不在 qrc 中的媒体文件时,出现错误“尝试播放无效的 Qt 资源”

为啥多个文件可以在 Qt .qrc 中使用相同的别名?

PyQt5 图形处理 - Qt Designer创建qrc资源文件引用图片资源实例演示,QTextBrower组件引用图片资源方法展示

在 qt 中使用 QFile.open 和 Qdir 将文件保存在特定目录中