跳转至

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";

但是,后来想多国语言化,在不同的语言中展示不同的名字。
于是,我将源文件中的内容修改成:

const QString SoftwareInfo::SW_APP_NAME = QObject::tr("SoftwareName");

以上的内容,使用Qt语言家能够正确识别,并且在软件中正常翻译了。
但上面的翻译在实际的使用中并不起作用。

2. 原因分析

这是由于已经将其设置为const的内容,是不能改变的。多国语言话后的翻译也不能替代原始的内容,导致了多国语言翻译的失败。

3. 修改方法

对于这样的情况,不能使用const变量,可以使用如下的方法:

QString SoftwareInfo::getAppName()
{
    // 这个类型的不能使用static const的变量
    return QObject::tr("SoftwareName");
}

这样对应的内容就能展示成功类。