`
izuoyan
  • 浏览: 9223859 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Qt学习之路(33): 国际化(上)

阅读更多
版权声明: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://devbean.blog.51cto.com/448512/244689
2D绘图部分基本告一段落,还在想下面的部分要写什么,本来计划先说下view-model的相关问题,但是前面看到有朋友问关于国际化的问题,所以现在先来说说Qt的国际化吧!
Qt中的国际化的方法有很多,常用的有使用QTextCodec类和使用tr()函数。前者将编码名称写到代码里面,除非你使用Unicode 编码,否则国际化依然是一个问题;后者就不会有这个问题,并且这也是Qt推荐的做法。因此,我们主要来说使用tr()函数的方法进行应用程序的国际化。
我们先来看一个很简单的MainWindow。为了清楚起见,这里只给出了cpp文件的内容:
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QMenuBar *menuBar = new QMenuBar(this );
QMenu *fileMenu = new QMenu(tr("&File" ), menuBar);
QAction *newFile = new QAction(tr("&New..." ), fileMenu);
fileMenu->addAction(newFile);
QAction *openFile = new QAction(tr("&Open..." ), fileMenu);
fileMenu->addAction(openFile);
menuBar->addMenu(fileMenu);
setMenuBar(menuBar);

connect(openFile, SIGNAL(triggered()), this , SLOT(fileOpen()));
}

MainWindow::~MainWindow()
{

}

void MainWindow::fileOpen()
{
QFileDialog *fileDialog = new QFileDialog(this );
fileDialog->setWindowTitle(tr("Open File" ));
fileDialog->setDirectory("." );
if (fileDialog->exec() == QDialog::Accepted) {
QString path = fileDialog->selectedFiles()[0];
QMessageBox::information(NULL, tr("Path" ), tr("You selected\n%1" ).arg(path));
} else {
QMessageBox::information(NULL, tr("Path" ), tr("You didn't select any files." ));
}
}
这是一个很简单的类,运行结果想必大家也都非常清楚:就是一个主窗口,上面有一个菜单栏,一个File菜单,里面有两个菜单项:
之所以把运行图贴出来,是为了大家能够看清,在代码中的&符号实际在界面中显示成为一条下划线,标记出这个菜单或者菜单项的快捷键。按照代码,当我们点击了Open时,会弹出一个打开文件的对话框:
这里的slot里面的代码在前文中已经详细介绍过。也许你会问,为什么要用这种麻烦的写法呢?因为我们曾经说过,使用static函数实际上是直接调用系统的对话框,而这种构造函数法是Qt自己绘制的。这对我们后面的国际化是有一定的影响的。
好了,都已经准备好了,下面开始进行国际化。所谓国际化,实际上不仅仅是把界面中的各种文字翻译成另外的语言,还有一些工作是要进行书写方式、 货币等的转换。比如,阿拉伯书写时从右向左的,这些在国际化工作中必须完成。但是在这里,我们只进行最简单的工作,就是把界面的文字翻译成中文。
首先,我们需要在pro文件中增加一行:
TRANSLATIONS += myapp.ts
myapp.ts是我们需要创建的翻译文件。这个文件的名字是任意的,不过后缀名需要是ts。然后我们打开命令提示符,进入到工程所在目录,比如我的是E:\My Documents\Workspace\Qt\MyApp,也就是pro文件所在的文件夹,然后输入命令
lupdate MyApp.pro
,如果你出现的是命令不存在,请注意将Qt的bin目录添加到环境变量中。此时,如果更新的数目,说明ts文件创建成功:
最后一行是说,找到7个需要翻译的原文字,0个已经存在。也就是说,这个文件是新建的。这时你会在工程目录下找到这个myapp.ts文件。也 许你会奇怪,为什么这里还会说已存在的数目呢?因为Qt这个工具很智能的能够识别出已经存在的文字和修改或新增的文字,这样在以后的工作中就不需要一遍遍 重复翻译以前的文字了。这也就是为什么这个工具的名字是“lupdate”的原因,因为它是“update”,而不仅仅是生成。
如果你有兴趣的话,可以用记事本打开这个ts文件,这个文件实际上是一个XML文件,结构很清晰。不过,我们要使用专业的翻译工具进行翻译。 Qt提供了一个工具,Qt Linguist,你可以在开始菜单的Qt项下面的Tools中找到。用它可以打开我们的ts文件,然后进行我们的翻译工作:
完全翻译完成后保存文件,然后在文件菜单下有个“发布”。点击这个按钮,工程目录下会有一个myapp.qm文件,这就是我们翻译得到的文件。Qt的qm文件实际上是二进制格式的,因此它经过了高度的优化,体积很小。
下面我们要修改main()函数,使之加载这个qm文件:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTranslator qtTranslator;
qtTranslator.load("myapp.qm" );
a.installTranslator(&qtTranslator);
MainWindow w;
w.resize(800, 600);
w.show();
return a.exec();
}
注意,QTranslator类实际是在QtCore下面的。代码还是很清晰:创建一个QTranslator对象,然后加载qm文件,然后将这个对象安装到QApplication类。好了,现在大功告成,重新编译后运行下程序吧!
咦?怎么还是英文的?哪里有错误了呢?这里往往令人疑惑,其实,这是由于我们使用load()函数加载qm文件时使用的是相对路径,这样直接 load(“myapp.qm”),其实会在当前编译后的exe所在目录下寻找这个qm文件,所以,只要我们把qm文件同exe放在同一目录下,再次运 行:
现在,这个界面已经是中文了吧!其实,这一小细节已经说明,qm文件其实是动态加载到exe文件中的,而不是直接编译进去的。这一点为我们进行动态切换语言提供了基础。

本文出自 “豆子空间 ” 博客,请务必保留此出处http://devbean.blog.51cto.com/448512/244689

分享到:
评论

相关推荐

    QT学习之路2-2020整理版(更新到94章)(pdf)

    《QT学习之路2-2020整理版》是一份详尽的QT开发教程,涵盖了从基础到进阶的多个方面。这份资料基于豆子大佬的博客内容进行整理,不仅包含原有的79章,还增加了豆子在2016年3月11日后更新的15章内容,共计94章,旨在...

    Qt学习之路源码

    "Qt学习之路源码"这个资源提供了一部分与Qt编程相关的源代码,旨在帮助学习者节省手动输入书中示例代码的时间,从而更专注于理解概念和机制。 Qt库由C++编写,它提供了丰富的API,支持事件处理、图形用户界面设计、...

    QT学习之路2+QT5教程+范例

    QT学习之路2+QT5教程+范例这个资料集合,显然是为了帮助初学者快速掌握QT开发技能,通过实例来深化理解。 首先,让我们关注《QT5教程 完整版.pdf》。这份文档应该详尽地介绍了QT5的各个方面,包括QT5的基础概念、...

    Qt学习之路2带目标可注释版pdf

    **Qt学习之路2带目标可注释版pdf** Qt是一个跨平台的应用程序开发框架,主要应用于桌面和移动设备,由The Qt Company维护,并且广泛支持C++和QML语言。这个资源,"Qt学习之路2带目标可注释版pdf",显然是一本专注于...

    Qt 学习之路:DZY

    ### Qt学习之路:核心知识点概览 #### 一、前言 - **Qt简介**:Qt是一个跨平台的C++图形用户界面应用程序开发框架。它不仅支持Windows、macOS、Linux等主流操作系统,还能用于开发嵌入式系统、移动设备应用(如...

    Qt学习之路.pdf

    ### Qt学习之路知识点总结 #### 一、基础知识与入门 - **Hello, World!** - **知识点**:Qt环境搭建、第一个Qt程序编写、基本的窗口显示。 - **重要性**:作为Qt初学者的第一课,通过简单的示例程序帮助理解Qt的...

    QT学习之路

    标题《QT学习之路》指明了文档的主要内容,即向读者介绍如何学习Qt这一跨平台的C++图形用户界面应用程序开发框架。Qt是一个功能强大的工具,能够用来开发具有图形用户界面的应用程序,并且支持多种操作系统平台,如...

    QT学习网站daquanQT学习网站

    9. **QT国际化与本地化**:QT支持多语言环境,可以轻松实现应用的国际化。 10. **QT嵌入式开发**:QT可以应用于嵌入式系统,如智能家电、汽车信息娱乐系统等。 在"QT学习网站.txt"文件中,可能包含了各种QT学习...

    QT学习之路2

    QT学习之路2,正如其标题所示,是针对初学者的一系列QT基础知识的学习资料,旨在帮助新手快速上手并掌握QT开发的基本技能。 QT框架提供了丰富的API,使得开发者能够创建出功能强大的桌面、移动以及嵌入式应用。它的...

    Qt+学习之路+2

    - **背景**: 本文档是基于作者之前的一个系列教程——《Qt学习之路》的更新版本,旨在适应Qt的新版本和发展趋势。 - **目的**: 更新和完善原有教程内容,使其更适合Qt 4.x和即将到来的Qt 5的学习需求。 - **定位**: ...

    Qt学习之路2--目录完整版

    《Qt学习之路》是针对Qt框架的一本详细教程,它以Qt4为基础,旨在帮助新手逐步掌握这个强大的跨平台应用程序开发工具。Qt是一个C++库,提供了丰富的API,用于构建图形用户界面(GUI)和非GUI应用程序。在本文中,...

    QT学习之路(全).pdf

    ### Qt学习之路知识点详解 #### 一、Qt简介与特性 **标题与描述解析:** - **标题**:“QT学习之路(全).pdf” - **描述**:介绍Qt作为一个著名的C++库,不仅限于GUI功能,还提供了一系列丰富的工具和服务。 **...

    Qt国际化教程

    ### Qt国际化教程详解 在开发跨国家或地区的应用程序时,软件的多语言支持变得尤为重要,以适应不同用户的语言习惯。Qt作为一个广泛使用的跨平台应用程序框架,提供了强大的国际化(i18n)支持,使得开发者能够轻松...

    QT.rar_QT学习资料_site:www.pudn.com

    这个“QT.rar”压缩包显然包含了与QT学习相关的资料,特别适合初学者和学生来提升他们的QT编程技能。 QT的核心特性包括: 1. **跨平台性**:QT支持Windows、Linux、macOS、Android、iOS等多个操作系统,使得开发者...

    QT学习入门及开发实例

    12. **QT国际化与本地化**:介绍如何为应用程序添加多语言支持。 "QT5开发及实例"部分可能侧重于QT5的新特性和实践应用: 1. **QT5新特性**:如QML(Qt Meta Language),用于声明式地创建用户界面,以及...

    qt学习视频3

    QT学习视频3主要聚焦于C++与QT的联合开发,这一部分的学习内容是QT学习旅程中的重要阶段。QT是一个强大的跨平台应用开发框架,由Qt Company维护,广泛应用于桌面、移动以及嵌入式设备的软件开发。C++是QT的主要编程...

    Qt学习之路---尤其适用Qt初学者

    ### Qt学习之路——尤其适用Qt初学者 #### 前言 Qt是一个强大的跨平台应用程序开发框架,广泛应用于桌面和嵌入式系统。对于初学者而言,掌握Qt的基础及其核心特性至关重要。本书《Qt学习之路》是专为Qt初学者准备的...

Global site tag (gtag.js) - Google Analytics