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

};

Class1.cpp :

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

QString Class1::s_strTexts3 = {

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.

相关推荐
z落落2 小时前
C# WinForm Socket 转串口设备服务器+Modbus CRC16校验+Socket 客户端
服务器·开发语言·c#
小灰灰搞电子8 小时前
Rust+Slint 实现动态消息提示框源码分享
开发语言·后端·rust
神仙别闹8 小时前
基于 C++ 实现两个有序链表序列的交集
java·c++·链表
传奇开心果编程9 小时前
【Rust入门知识点学与练】第21课:Trait 进阶 Advanced Traits
开发语言·学习·rust
新时代牛马9 小时前
字符设备驱动完整篇:从 cdev_add、file_operations 到chrdev_open 与排障
开发语言·python
swordbob9 小时前
ReentrantLock 与 AQS 完整学习手册
java·开发语言
白山编程大哥10 小时前
Java OutputStreamWriter 详解:从字符到字节的桥梁
java·开发语言·python
hansang_IR10 小时前
【题解】[APIO2023] 赛博乐园 / cyberland
c++·算法·图论
落羽的落羽11 小时前
【AI】快速理解AI应用的相关名词概念
linux·c++·人工智能·python·计算机网络·算法
刚入门的大一新生11 小时前
Linux-进程控制
linux·运维·服务器·c++