[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”的原因,可以如此修改一番。
分享到:
相关推荐
多语言简易天气预报器[Qt] 这是http://blog.csdn.net/jasonblog/archive/2010/04/02/5445191.aspx所配套的源码。 鉴于有不少朋友陆续发邮件给我,所以放到这里来了。
使用Qtcreator开发的小型天气预报器,网络接口获取天气数据
基于QT的在线天气预报源码
qt天气预报demo,内容主要有 通过API来获取天气信息,在解析数据,显示到部件上,以及二级联动下拉框的使用,通过IP来定位,实现默认位置。局域网IP暂时不能获取到内网IP
该项目是在Qt5环境下开发的,利用天气预报接口获取天气数据并转成Json格式,输入城市代码就能获取该城市的当天的天气预报和未来一个星期的天气,界面美观大方。
VS qt多语言国际化,动态切换菜单栏标题语言,不能用请打死我
qt做一个简易浏览器,实现打开网页,后退,前进,主页跳转功能
这个项目是用qt做的,可以获取最近三天的天气预报。输入一个城市名(支持中文和拼音输入),然后点击获取就能显示天气预报了。
基于qt 国际化示例, 实现多语言 在工程中添加想要翻译的语言ts, 然后点击Qtcreator中的《工具》《更新翻译》生成对应的ts文件,然后打开ts文件,将对应的翻译语言填好,再点Qtcreator中的《工具》《发布翻译》生成....
从Google提供的天气预报API接口获取的天气情况,只需输入查询地址,就可以获取实时天气。
该项目的系列介绍文章:https://blog.csdn.net/weixin_50964512/article/details/125710864
用QT编写的天气预报程序,可以查询未来天气情况,pm2.5等等。 github地址: https://github.com/Greedysky/TTKWeather
C++QT实现的简易示波器
用QT编写的天气预报程序,可以查询未来天气情况,pm2.5等等。
qt 5写的天气预报程序,使用百度api接口,实现天气的网络查询.
使用Qt写的计算器简易程序,代码中备注了各个函数的作用,适合新手学习使用。
使用Qt5写的一个天气查询界面。可以查询各个城市的天气,界面加了换肤的功能。并且还对近四天的天气进行了预测。自认为界面比较美观。Qt5可以直接运行。
Qt实战项目-天气预报 本代码博客:http://blog.csdn.net/wu9797/article/details/79100662
解压包里的 qtcreator_zh_CN.qm 文件到 X:\Qt\2010.02.1\share\qtcreator\translations 注意修改你的Qt安装目录。 然后重启Qt Creator即可。
Qt多语言国际化demo(VS2015+Qt5.8.0)