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";
但是,后来想多国语言化,在不同的语言中展示不同的名字。
于是,我将源文件中的内容修改成:
const QString SoftwareInfo::SW_APP_NAME = QObject::tr("SoftwareName");
以上的内容,使用Qt语言家能够正确识别,并且在软件中正常翻译了。
但上面的翻译在实际的使用中并不起作用。
2. 原因分析
这是由于已经将其设置为const的内容,是不能改变的。多国语言话后的翻译也不能替代原始的内容,导致了多国语言翻译的失败。
3. 修改方法
对于这样的情况,不能使用const变量,可以使用如下的方法:
QString SoftwareInfo::getAppName()
{
// 这个类型的不能使用static const的变量
return QObject::tr("SoftwareName");
}
这样对应的内容就能展示成功类。

在Qt编程中,作者最初使用constQString表示软件名称,以确保其不可变性。然而,当尝试实现多语言化时,发现静态const变量无法被翻译。问题在于const变量一旦初始化就不能更改,因此多语言翻译无效。为了解决这个问题,作者建议移除const修饰符,改用非静态成员函数返回翻译后的字符串,从而成功实现了软件名称的多语言展示。
759

被折叠的 条评论
为什么被折叠?



