[Qt Topic] – 中文化研习,做一个多语言的简易天气预报器

简介:

[Qt Topic] – 中文化研习,做一个多语言的简易天气预报器

作者: Jason Lee

日期: 2010-04-01 -- 2010-04-02

平台: Qt SDK v2010.02.1 + Windows Xp

声明: 文章作者仅在Intel软件网络CSDN博客 发表本文,如有转载,请注明出处。

 

[1] 简单地使用 QTextCodec tr 配合

在默认情况下,我们直接在源码中使用中文,比如 setWindowTitle(tr(" 中文化研习 ")); ,则会在运行界面发现中文乱码。遇到这种问题,如果无需考虑国际化,则可以直接使用 QTextCodec 设置编码方式:

该语句需要包含头文件 #include <QTextCodec>

选择 GB18030 而不是 GBK 或者 GB2312 是因为前者的汉字收录更丰富,并向下兼容了后两者。但是在嵌入式设备上,如手机或 MP3 ,并不一定支持 GB18030

而既然是 setCodecForTr ,那么就应该在第一次对 tr() 的调用之前设置编码方式,一般应该在 main() 函数中紧接 Qapplication 对象创建后设置。 tr() 用来返回一个翻译过的文本版本,在编写代码的过程中,对每一个用户可见的文本都应该加上该函数。

这样设置了以后,基本的中文显示,如按钮文本、窗口标题以及文本编辑区域,都可以得到良好的显示。

值得一提的是,如果出现的不是乱码,而是问号,则可能是字符编码内无该字的编码。另外一种问题是,如果出现的是方框(正方形),而不是乱码,则可能是无该指定字体,可以通过设置 QFont 尝试解决该问题。

 

[2] 关于使用 QString 来显示中文

一是使用 toLocal8Bit fromLocal8Bit 。比如下述代码就可以良好地显示中文:

 

通过这种方式可以使用系统的本地 8 位编码格式。

二是通过 QString QTextCodec 结合,设置在 const char * Qstring 之间转换时使用的编码格式,比如下述代码也可以使得汉字良好显示:

 

 

 

[3] 使用 Qt 翻译家

Qt 提供了外部的翻译文件,只要对需要进行翻译的文本使用 tr() 函数,然后在 .pro 工程文件中添加 TRANSLATIONS = localizer.ts ,这里的文件名自然要根据具体需要设置。之后使用 lupdate 命令,如 lupdate localizer.pro ,生成 localizer.ts 。接着用 linguist 打开 localizer.ts ,并在文件里面进行相应文本的翻译,保存后发布,生成 localizer.qm

至此,在包含了头文件 #include <QTranslator> 后,即可以安装翻译家,将相应的文本进行翻译:

 

此时再运行程序,则可以发现界面上的文本已经得到翻译了。

补充:在上述代码中, localizer.qm 是由 qrc 文件指定位置的,本例中 localizer.qm 相对于 qrc 文件的位置是“ /localizer.qm ”,所以添加的时候使用“ :/localizer ”。而如果 qm 文件相对于 qrc 文件的位置是“ /translator/localizer.qm ”,则需要指定为“ :/translator/localizer.qm ”。

 

[4] 文件读写中的中文

这里以读取 Google 的天气 API 为例。

Google 的中文天气 API http://www.google.com/ig/api?hl=zh_cn&weather= ,等号后面加城市名,比如“ beijing ”或者“ hongkong ”。

API 是以 XML 格式给出信息,而如果我们不加以修饰地直接读取该 XML 文件的话,则会出现如“ é£ Žå‘ï ¼š ä ¸œåŒ—、 风 é ”之类的乱码。

针对这种情况,可以先使用(不一定必须使用) QString 存放信息,因为可以用 QTextCodec QString 进行编码格式的设置:

      

这样的话就可以以相应的编码格式进行文件读取。运行后,可以看到中文显示正常。

同样地,使用其它方式进行文件读取的话也可以使用类似设置编码格式的方法。比如,使用 QTextStream 时,如果希望使用特定的编码进行读写,则可以使用该类的成员函数 setCodec()

 

[5] 可动态切换语言的天气预报器

       关于这个话题可以精炼成以下几点(具体的完整代码将会在后面给出):

1 、动态的语言切换的实现是通过在运行时,用户进行语言选择时触发的信号引起相应槽的运作。比如可以设置一个语言菜单供用户选择语言,我在这里只设置了英语和中文。当用户点击菜单选项的时候,利用 QTranslator 进行不同 qm 文件的重新载入,然后再重绘可见文本。所以这就要求:一是用户可见的文本应该用 tr() 函数处理,毕竟这不是一样很大的负担,最好将其养成习惯;二是生成用户可见文本的代码最好放在一个函数里,为了取名有意义可以取做 retranslateUi()

2 、天气预报的功能是通过调用 Google API 实现的,需要注意的是温度单位在国内外的不同。如果当前用户选择英文,就选择英文 API ,同样的,如果用户选择中文,就设置 URL 为中文 API 地址。这就需要在编码的时候进行判断,判断的方式有多种。

3 Google 天气 API 给的结果是 XML 格式的,所以参考 [4] 中提到的,要设置编码格式。正确读取 XML 数据后,再根据结点名称获取具体的天气数据,如最高温、最低温以及日期等。

4 、最后就是将天气预报的结果呈现出来。

 

[ 结语 ] 这个小程序我给放到了 http://qwr.sf.net ,各位如果有兴趣去可以下载完整源码。由于陆续有朋友邮件我说需要源码(其实sf.net上有),所以我给放到了CSDN资源上,地址为:http://download.csdn.net/source/2231965


[补充]后来,我在写一个程序的时候发现使用GB18030(或者GBK、GB2312也一样)在我的机子上运行是OK的,但是拿到其他机子(同样的系统)却出现了乱码,这令我很是惊讶。不过后来还是寻求了一个解决方案,就是设置当前编码为本地编码:

这可能是楼下的朋友提出的不管输什么城市都是“No Such City”的原因,可以如此修改一番。

目录
相关文章
|
4月前
|
搜索推荐 IDE API
打造个性化天气应用:iOS开发之旅
【9月更文挑战第35天】在这篇文章中,我们将一起踏上iOS开发的旅程,通过创建一个个性化的天气应用来探索Swift编程语言的魅力和iOS平台的强大功能。无论你是编程新手还是希望扩展你的技能集,这个项目都将为你提供实战经验,帮助你理解从构思到实现一个应用的全过程。让我们开始吧,构建你自己的天气应用,探索更多可能!
92 1
|
6月前
|
搜索推荐 API 开发工具
打造个性化天气应用:从零开始的iOS开发之旅
【8月更文挑战第31天】本文是一篇针对初学者的iOS应用开发指南,将引导读者通过Swift和iOS SDK构建一个简单而美观的天气应用。我们将探索如何利用API获取实时天气数据,并在应用中实现用户友好的界面设计。文章不仅包括代码示例,还提供了设计理念和用户体验优化的建议,旨在帮助初学者理解iOS开发的基础知识,并激发他们创造个性化应用的兴趣。
|
2月前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
87 14
|
6月前
|
JSON 搜索推荐 定位技术
打造个性化天气应用:iOS开发实战
【8月更文挑战第31天】在这篇文章中,我们将一起探索如何从零开始构建一个iOS天气应用。通过简单易懂的步骤,你将学习到如何使用Swift编程语言和苹果的开发工具Xcode来实现这个目标。我们会涉及到用户界面设计、网络编程以及数据解析等关键技能,确保你能够顺利地完成这个项目。无论你是初学者还是有一定经验的开发者,这篇文章都会带给你新的启发和收获。
|
9月前
|
人工智能 前端开发 机器人
Coze初体验——为城市创作独特的天气图景
Coze初体验——为城市创作独特的天气图景
Coze初体验——为城市创作独特的天气图景
|
监控 Python
【小硬核】你的聊天记录是怎么被公司监控的?| Python 主题月
【小硬核】你的聊天记录是怎么被公司监控的?| Python 主题月
257 0
|
人工智能 机器人 开发工具
Facebook 发布嵌在聊天软件里的智能 AI
Facebook 发布嵌在聊天软件里的智能 AI
162 0
Facebook 发布嵌在聊天软件里的智能 AI
|
人工智能 自然语言处理 机器人
两个Bot自创新语言!Facebook机器人纽约自由行导航定位碾压人类
在FAIR和蒙特利尔大学合作的最新研究中,研究人员首次将实验中将感知、行动和使用自然语言交互达成目标这三个任务结合在一起:让两个Bot使用自然语言对话,让“导游bot”将“游客bot”带到指定地点,而且导航成功率超越了人类。
1721 0
|
机器学习/深度学习 人工智能 安全
云栖科技评论第19期:微软年底又放大招,发布多人多语种实时翻译功能
本周热点科技事件,是阿里云“ET”采用分布式爬虫收集全球海量互联网信息,利用文本挖掘和语义分析解析新闻关键词,使用深度神经网络将新闻分类,汇总而选择最新鲜的科技信息。 制作:人民网研究院 内容提供:阿里云研究中心
1364 0