Qt给const的QString进行多国语言遇到的问题
在Qt/C++中不能直接对const的QString变量进行多国语言化,这是由于const的变量是不能改变的,Qt的多国语言是程序启动后加载的。可以使用返回值得方法将展示多过语言的效果。
0. 缘起
在软件中,我先使用一个const QString
的变量表示当前软件的名称,主要是我感觉这个在整个程序中是不会改动的,因此就使用了const
修饰。
如下所示:
// 头文件
#ifndef SOFTWAREINFO_H
#define SOFTWAREINFO_H
#include <QString>
class SoftwareInfo
{
public:
static QString getAppName() {return SW_APP_NAME;};
// 省略其他代码
private:
SoftwareInfo() = delete;
SoftwareInfo(const SoftwareInfo& other) = delete;
SoftwareInfo &operator=(const SoftwareInfo& other) = delete;
static const QString SW_APP_NAME;
};
#endif // SOFTWAREINFO_H
// 源文件
// 省略其他代码
const QString SoftwareInfo::SW_APP_NAME= "SoftwareName";
但是,后来想多国语言化,在不同的语言中展示不同的名字。
于是,我将源文件中的内容修改成:
以上的内容,使用Qt语言家能够正确识别,并且在软件中正常翻译了。
但上面的翻译在实际的使用中并不起作用。
2. 原因分析
这是由于已经将其设置为const
的内容,是不能改变的。多国语言话后的翻译也不能替代原始的内容,导致了多国语言翻译的失败。
3. 修改方法
对于这样的情况,不能使用const变量,可以使用如下的方法:
QString SoftwareInfo::getAppName()
{
// 这个类型的不能使用static const的变量
return QObject::tr("SoftwareName");
}
这样对应的内容就能展示成功类。