我想通过 C++ 类中的 Qt 资源系统读取 json 文件。
假设Translator.h
:
class Translator
{
public:
Translator();
void read(const QString &fpath);
QString valueAt(const QString &key) const;
};
extern Translator _tr;
inline QString Tr(const QSTring &key) {
return _tr.valueAt(key);
}
并且Translator.cpp
:
Translator::Translator() {
read(":/Resources/Text/Translation.json");
}
void Translator::read(const QString &fpath) {
QFile f(fpath);
f.open(QIODevice::ReadOnly | QIODevice::Text);
f.readAll(); // f.errorString() -> no such file or directory
f.close();
}
Translator _tr;
还有.qrc
文件:.qrc:
<RCC version="1.0">
<qresource>
<file>Resources/Text/Translation.json</file>
</qresource>
</RCC>
每次我运行上面的代码时都会出错:
QIODevice::read (QFile, ":\Resources\Text\Translation.json"): device not open
但是,当我删除外部Translator
对象并在主函数中创建它或将路径“Resources/Text/Translation.json”替换为完整路径时,不会再出现错误
笔记:
可能值得一提的是,我想Translator.json
在整个应用程序中阅读一次,为此我创建了一个extern Translator