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

时间:2017-10-30 14:26:04

标签: qt qt5 qfile rcc qt5.9

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

enter image description here

我正在使用以下代码来读取文件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

2 个答案:

答案 0 :(得分:0)

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

我发现在5.9中没有更多的Qt5CLucened.dll。可能的问题是过时的Qt5CLucened.dll文件

答案 1 :(得分:0)

万一有类似的情况。

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

我尝试过:

  1. 重新启动系统。

  2. 重新启动Qt创建者

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

  4. 更改了qrc前缀

  5. 删除qrc的目标文件并再次添加

没有帮助。

最后,我删除了qrc并添加了具有相同名称和相同文件的新qrc,并删除了build文件夹中的旧qrc_xxx.cpp和qrc_xxx.o,这也无济于事。

但是,我删除了qrc并添加了一个具有不同名称的新qrc ,例如,旧的qrc名为res.qrc和新的qrc名为res1.qrc,然后构建qmake并构建项目,效果很好!

我不知道为什么,也许有些旧的缓存?我花了很长时间..):

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