Qt多语言问题 —— 静态成员变量

Qt语言专家(linguist)很容易处理多语言问题,但是最近遇到奇怪的问题,百思才得解,记录并分享经验。

代码如下:

main.cpp :

==========================

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

QTranslator translator;

QString strLangFile = GetCurrentLangFile(); // 从配置中获取当前多语言编译文件,.qm格式

if (translator.load(strLangFile)) {

a.installTranslator(&translator);

}

// 其余代码省略

}

Class1.h :

=======================

Class1 {

private:

static QString s_strTexts[3];

};

Class1.cpp :

=======================

QString Class1::s_strTexts[3] = {

tr("字符串1"),

tr("字符串2"),

tr("字符串3"),

};

Class1 类定义了一个静态成员变量数组,用来定义该类使用的字符串列表。

问题:

在main.cpp中执行了 installTranslator()函数后,发现字符串总是没有被翻译成指定的语言。

原因:

静态成员变量的加载时机先于 main() 函数的执行,因此对installTranslator()函数的调用没有作用到s_strTexts静态成员变量。

解决方案:

  1. 将 s_strTexts设计为非静态成员变量;

  2. 每次引用s_strTexts的元素时,都调用QCoreApplication::translate() 函数显示翻译语言;

显然采用方案1比较方便,但是有多Class1对象时,会有多份字符串列表的副本。若列表很长,占用的内存会显著增加,则可考虑使用方案2.

相关推荐
それども2 小时前
Spring Bean @Autowired自注入空指针问题
java·开发语言·spring
用户805533698032 小时前
现代Qt开发教程(新手篇)1.4——容器
c++·qt
沐知全栈开发2 小时前
JavaScript for 循环
开发语言
星空椰2 小时前
JavaScript 基础入门:从零开始掌握变量与数据类型
开发语言·前端·javascript·ecmascript
ulias2122 小时前
Linux中的开发工具
linux·运维·服务器·开发语言·c++·windows
geovindu2 小时前
go: Model,Interface,DAL ,Factory,BLL using mysql
开发语言·mysql·设计模式·golang·软件构建
qq_466302452 小时前
u盘插入拔出,listView不显示盘符变化
c++·qt
XiYang-DING2 小时前
【Java】反射
java·开发语言
意法半导体STM322 小时前
【官方原创】STM32 USBx Host HID standardalone移植示例 LAT1449
开发语言·前端·stm32·单片机·嵌入式硬件