我想通過C++類中的Qt資源系統讀取json文件。無法讀取具有extern類型和資源系統的文件
假設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
然而,當我刪除的extern Translator
對象,並創建一個在主要功能或在更換路徑「資源/文本/ Translation.json」完整路徑沒有更多的錯誤
注:
可能是很好的一提的是,我想在我的整個應用程序讀取Translator.json
一次,爲我創造一個extern Translator
這可能是在全局變量的初始化一個順序的問題。一個解決方案可能是在所有其他全局變量之後初始化'_tr'。例如:用'Translator * _tr = nullptr;'聲明它,並在'main'的開頭或在使用它的第一個函數中調用'_tr = new Translator'。 – Franck
@ Frank.Could你請再看看我的Translator.h。實際上我想在每個源文件中包含Translator.h,我們將能夠使用Tr()函數並初始化主文件或初始化每個源文件不可能爲我的情況 – IMAN4K
你可以例如用'if(!_tr)_tr = new Tranlator來定義'Tr(...)';返回_tr-> valueAt ...'。這只是隔離問題的第一個建議。 – Franck