QT多国语言动态切换常见例子
2016-03-31 12:04
746 查看
QT多国语言需要用到三个工具:
l Lupdate:生成ts文件
l Linguist:翻译ts文件中的字符串
l Lrelease:生成qm文件
这三个工具都是QT自带的工具,在相关的安装路径下。
1. 准备一个界面工程
新建工程命名为: cabagge_langsw, 使用设计师设计界面设计如下
设置下拉框内容的时候不用翻译,其他显示的字符串需要翻译
如果手工代码更新界面的内容,需要在字符串前面使用tr函数
2. 配置ts文件
在.pro中添加
TRANSLATIONS= lang_en.ts \
lang_zh.ts
需要支持多少种语言,则就添加多少个文件,每个文件对应一种语言的翻译
3. 生成.ts文件
工具->外部->Qt语言家->更新翻译,将生成翻译文件ts文件(lang_en.ts
和lang_zh.ts )
【注意】这一步一定要在编译完后再做,因为ui_xxx.h编译后才生成.
4. 使用linguist.exe翻译文件
Linguist.exe在QT的安装路径下,
如我的是在:D:\DevSoft\Qt\Qt5.4.2\5.4\mingw491_32\bin
通过Linguist打开.ts文件,给每个需要翻译的字符添加对应的翻译语言
5. 发布生成qm文件
每个字符翻译完之后,需要转换为qm文件
在当前路径下生成对应的qm文件。
每个ts文件都重复做上面两个步骤。
6. 添加代码:切换时更新翻译语言的版本
添加切换下拉框的变化的槽函数:
[cpp] view
plain copy
//下拉框的切换的槽函数
void Widget::on_comboBox_sw_currentIndexChanged(const QString &arg1)
{
//判断是哪一个语言
QString lang = "zh.qm";
if(arg1 == "English"){
lang = "en.qm";
}
//安装语言翻译器
static QTranslator* translator = NULL;
if (translator != NULL)
{
qApp->removeTranslator(translator);
delete translator;
translator = NULL;
}
translator = new QTranslator;
QString qmFilename = "lang_" + lang;
//这里用了绝对路径你要更改回来哦
if (translator->load(
QString("G:/WorkingSpace/Qt/2016.3/cabagge_langsw/"
)+qmFilename))
{
bool fb = qApp->installTranslator(translator);
}
}
7. 添加更新界面字符串的响应
调用installTranslator方法后,系统会自动给每个窗体发送信号并告知changeEvent槽event产生,在要切换语言的每个窗体中都要重写changeEvent这个方法,格式基本差不多:
[cpp] view
plain copy
void Widget::changeEvent(QEvent *e)
{
QWidget::changeEvent(e);
switch (e->type())
{
case QEvent::LanguageChange:
ui->retranslateUi(this);
//还有其他手工更新界面的内容
break;
default:
break;
}
}
8. 效果图:
l Lupdate:生成ts文件
l Linguist:翻译ts文件中的字符串
l Lrelease:生成qm文件
这三个工具都是QT自带的工具,在相关的安装路径下。
1. 准备一个界面工程
新建工程命名为: cabagge_langsw, 使用设计师设计界面设计如下
设置下拉框内容的时候不用翻译,其他显示的字符串需要翻译
如果手工代码更新界面的内容,需要在字符串前面使用tr函数
2. 配置ts文件
在.pro中添加
TRANSLATIONS= lang_en.ts \
lang_zh.ts
需要支持多少种语言,则就添加多少个文件,每个文件对应一种语言的翻译
3. 生成.ts文件
工具->外部->Qt语言家->更新翻译,将生成翻译文件ts文件(lang_en.ts
和lang_zh.ts )
【注意】这一步一定要在编译完后再做,因为ui_xxx.h编译后才生成.
4. 使用linguist.exe翻译文件
Linguist.exe在QT的安装路径下,
如我的是在:D:\DevSoft\Qt\Qt5.4.2\5.4\mingw491_32\bin
通过Linguist打开.ts文件,给每个需要翻译的字符添加对应的翻译语言
5. 发布生成qm文件
每个字符翻译完之后,需要转换为qm文件
在当前路径下生成对应的qm文件。
每个ts文件都重复做上面两个步骤。
6. 添加代码:切换时更新翻译语言的版本
添加切换下拉框的变化的槽函数:
[cpp] view
plain copy
//下拉框的切换的槽函数
void Widget::on_comboBox_sw_currentIndexChanged(const QString &arg1)
{
//判断是哪一个语言
QString lang = "zh.qm";
if(arg1 == "English"){
lang = "en.qm";
}
//安装语言翻译器
static QTranslator* translator = NULL;
if (translator != NULL)
{
qApp->removeTranslator(translator);
delete translator;
translator = NULL;
}
translator = new QTranslator;
QString qmFilename = "lang_" + lang;
//这里用了绝对路径你要更改回来哦
if (translator->load(
QString("G:/WorkingSpace/Qt/2016.3/cabagge_langsw/"
)+qmFilename))
{
bool fb = qApp->installTranslator(translator);
}
}
7. 添加更新界面字符串的响应
调用installTranslator方法后,系统会自动给每个窗体发送信号并告知changeEvent槽event产生,在要切换语言的每个窗体中都要重写changeEvent这个方法,格式基本差不多:
[cpp] view
plain copy
void Widget::changeEvent(QEvent *e)
{
QWidget::changeEvent(e);
switch (e->type())
{
case QEvent::LanguageChange:
ui->retranslateUi(this);
//还有其他手工更新界面的内容
break;
default:
break;
}
}
8. 效果图:
相关文章推荐
- 关于Qt中QWidget的setParent的使用方法
- 关于Qt5.6连接SQL sever的一些问题
- Qt 建立带有子项目的工程
- QT中的 QPolygonF 坐标说明
- Arm开发板+Qt学习之路-开发板显示 /bin/sh: ./hello: Permission denied
- MINGW64位编译QT
- QT中QWidget、QDialog及QMainWindow的区别
- QT30 how to use QcheckBox and QRadioButton in qt
- QT28 how to display a splash screen in qt
- QT27 how to read text file and display file to a textbrowser or textedit
- QT26 show time and date
- QT24&25 how to run exe file by clicking a button in Qt
- QT23 how to open a website in a default user browser
- QT21 Display selected row from QTableView to QlineEdit
- Qt17 load sqlite table data to qtableview
- QT16 delete data from sqlite database with pushbutton
- Qt15 Update a data from Sqlite database with pushbutton
- QT14 how to save data in sqlite database with pushbutton
- Qt浅谈之四十七下拉列表菜单
- QT5: QDialog.