这行代码中的instance()
不太清楚是什么意思
this->currentTranslator = new QTranslator(instance())
总之,以下是一些需要检查的内容:
- 您的
YourProjectName.pro
文件中是否有类似于此的内容?
RESOURCES += \
resources.qrc
(resources.qrc
是我通常使用的名称。请用您选择的任何名称替换它。)
- 您是否检查了您的
resources.qrc
中的前缀?您确定其中有一个 translation/
前缀吗?类似这样的内容也应该可以工作:
<RCC>
<qresource prefix="/">
<file>translation/YourProjectName_en.qm</file>
<!-- other resources here -->
</qresource>
</RCC>
假设您在translation/
子目录下有YourProjectName_en.qm
文件。
这是我的成功经验™:
在main.cpp
文件中:
QApplication app(argc, argv);
QApplication::setApplicationName("MyApplication");
QApplication::setApplicationVersion("4.4");
QApplication::setOrganizationName("FUBAR");
QApplication::setOrganizationDomain("www.fu.bar");
QTranslator translator;
translator.load(app.applicationName() + "_" + QLocale::system().name(), ":/ts");
app.installTranslator(&translator);
在resources.qrc
中:
<RCC>
<qresource prefix="/">
<file>resources/pixmaps/exit.png</file>
<!-- ... -->
<file>ts/MyApplication_en.qm</file>
<file>ts/MyApplication_es.qm</file>
</qresource>
</RCC>
在MyApplication.pro
文件中:
TRANSLATIONS += \
ts/MyApplication_en.ts \
ts/MyApplication_es.ts
RESOURCES += \
resources.qrc
win32 {
RC_FILE = win32.rc
}
OTHER_FILES += \
win32.rc \
TODO.txt
这里是项目树的简要描述:
MyApplication
├── resources
│ ├── pixmaps
│ └── ...
├── (sources are here)
├── MyApplication.pro
├── resources.qrc
├── TODO.txt
├── ts
│ ├── MyApplication_en.qm
│ ├── MyApplication_en.ts
│ ├── MyApplication_es.qm
│ └── MyApplication_es.ts
└── win32.rc
这是一个非常小的项目,源码与一些构件混在一起。
编辑:
我认为你应该尝试将文件名和目录部分分开传递到加载方法中。简而言之,改变这行代码:
if (this->currentTranslator->load(":/translation/myApp_en.qm"))
转换成这个
if (this->currentTranslator->load("myApp_en.qm", ":/translation/"))
.moc
文件的MOC_DIR
文件夹中? - NiklasRCC_DIR
的资源文件目录,但我不确定这是否符合您的要求。您可以根据自己的需要对资源文件进行分类,并在.qrc
文件中正确定义各个文件的路径。 - dschulzRCC_DIR
。非常感谢! - Niklas