Qt之国际化(系统文本-QMessageBox按钮、QLineEdit右键菜单等)

简介: 简介使用Qt的时候,经常会遇到英文问题,例如:QMessageBox中的按钮、QLineEdit、QSpinBox、QScrollBar中的右键菜单等。通常情况下,我们软件都不会是纯英文的,那么如何处理这些问题呢?其实这也属于国际化的一部分。下面,以中英文切换为例来为大家分享,其它语言切换类似。简介查找翻译文件加载翻译文件切换语言

简介

使用Qt的时候,经常会遇到英文问题,例如:QMessageBox中的按钮、QLineEdit、QSpinBox、QScrollBar中的右键菜单等。通常情况下,我们软件都不会是纯英文的,那么如何处理这些问题呢?其实这也属于国际化的一部分。

这里写图片描述这里写图片描述这里写图片描述

下面,以中英文切换为例来为大家分享,其它语言切换类似。

查找翻译文件

  • qt_zh_CN.qm

见名知义,这正是处理中文的翻译文件。

我们可以从Qt的安装目录中找到它,以我的目录为例:D:\Qt\Qt5.5.1\5.5\msvc2013\translations。

如果没有此文件,不用着急,我们可以查找此文件对应的翻译源qt_zh_CN.ts。然后使用lrelease,生成对应的qt_zh_CN.qm文件。

加载翻译文件

QTranslator translator;  
translator.load(":/qm/qt_zh_CN.qm");  
qApp->installTranslator(&translator); 

有点意思,这样很快的就处理为中文了。

这里写图片描述这里写图片描述这里写图片描述

切换语言

加载为中文之后,假设我们存在多语言切换问题,那么当我把语言切换为中文后,之前的qt_zh_CN.qm已经加载了,如何再切换回来呢?

好了,既然存在load,那么不出意外地话也会存在unload吧。不好意思,翻完所有的API我们并没有发现此接口!

继续分析,installTranslator是安装翻译文件的意思,那么我们可以想办法把它卸载掉,通过查找我们很容易发现removeTranslator接口。

官网对此接口的的解释为:

Removes the translation file translationFile from the list of translation files used by this application. (It does not delete the translation file from the file system.)

也就是说:从翻译文件列表中移除翻译文件后,并没有从文件系统中删除翻译文件。

那么,通过调用此接口,就可以移除翻译文件了。翻译文件一旦被移除,那么之前所加载的对应语言也就无效了。

if (language != MyApp::English)
{
    m_systemTranslator.load(QString(":/qm/qt_zh_CN.qm"));
    qApp->installTranslator(&translator);
}
else
{
    qApp->removeTranslator(&translator);
}

如上,切换语言的时候判断当前语言,如果为中文则加载qt_zh_CN.qm翻译文件,然后安装翻译器。否则,进行卸载!

这样,加载对应语言的时候,无论是自定义的文本,还是系统文本,我们都可以自由的切换了。

目录
相关文章
|
16天前
【Qt 学习笔记】按钮实现helloworld | 信号与槽概述
【Qt 学习笔记】按钮实现helloworld | 信号与槽概述
21 0
|
1月前
|
开发框架 Java 编译器
【Qt 元对象系统 01 】深入探索Qt的元对象系统:核心地位、功能与构成
【Qt 元对象系统 01 】深入探索Qt的元对象系统:核心地位、功能与构成
52 0
|
1月前
|
安全 前端开发 C++
C++视角下的Qt按钮:从基础应用到高级定制(二)
C++视角下的Qt按钮:从基础应用到高级定制
45 2
|
1月前
|
XML JSON 算法
C++视角下的Qt按钮:从基础应用到高级定制(一)
C++视角下的Qt按钮:从基础应用到高级定制
90 2
|
1月前
|
Linux 数据处理 C++
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(一)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
77 0
|
1月前
|
XML 安全 C++
DBus类型系统以及在Qt和C++ 中的使用(二)
DBus类型系统以及在Qt和C++ 中的使用
44 0
|
1月前
|
存储 Linux API
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(三)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
31 1
|
1月前
|
消息中间件 Linux 数据处理
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(二)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
32 1
|
30天前
|
安全 数据处理 C++
【Qt 底层之事件驱动系统】深入理解 Qt 事件机制:主事件循环与工作线程的交互探究,包括 QML 的视角
【Qt 底层之事件驱动系统】深入理解 Qt 事件机制:主事件循环与工作线程的交互探究,包括 QML 的视角
118 3
|
25天前
|
C++
QT实现一个简单的日志打印系统
QT实现一个简单的日志打印系统

热门文章

最新文章

推荐镜像

更多