前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt中中文处理的简单方法

Qt中中文处理的简单方法

作者头像
阳光岛主
发布2019-02-19 17:26:21
1.3K0
发布2019-02-19 17:26:21
举报
文章被收录于专栏:米扑专栏米扑专栏

    QT是一套很不错的界面开发库,而且考虑到了跨平台的要求,使用也相对比较容易上手。我也刚刚才学习用QT开发,发现它对中文的处理做的不是很好,或者更贴切的是做的不够智能吧,如果在字符串中输入中文,显示的就会是乱码。     下面就介绍一个简单的方法,让我们的中文正确显示出来,先看一段程序,该程序主要功能就是显示一个窗口,窗口上面的按钮显示中文。

 1 #include <qapplication.h>  2 #include <qpushbutton.h>  3 #include <qfont.h>  4 #include <qvbox.h>  5 #include <qtextcodec.h>  6 #include <qstring.h>  7 #include <qobject.h>  8 int main(int argc, char **argv)  9 { 10     QApplication a(argc,argv); 11 12     QVBox box; 13     box.resize(200,120); 14     QPushButton quit("退出",&box); 15     quit.setFont( QFont( "Times", 18, QFont::Bold ) ); 16     QObject::connect(&quit,SIGNAL(clicked()),&a,SLOT(quit())); 17     a.setMainWidget(&box); 18     box.show(); 19 return a.exec(); 10 }

在vc6.0下面编译运行程序之后我们会见到界面如下,但是上面的按钮却是乱码了。

那我们该怎么办呢?别着急,其实方法很简单,主要思路就是给应用设定一个字符集,并且把要显示的字符做适当的转化处理就可以了,说起来好像还有些复杂,但是看看代码你就很快明白了。

 1 #include <qapplication.h>  2 #include <qpushbutton.h>  3 #include <qfont.h>  4 #include <qvbox.h>  5 #include <qtextcodec.h>  6 #include <qstring.h>  7 #include <qobject.h>  8 int main(int argc, char **argv)  9 { 10     QApplication a(argc,argv); 11     a.setDefaultCodec(QTextCodec::codecForName("GBK")); 12     QVBox box; 13     box.resize(200,120); 14     QPushButton quit(QObject::tr("退出"),&box); 15     quit.setFont( QFont( "Times", 18, QFont::Bold ) ); 16     QObject::connect(&quit,SIGNAL(clicked()),&a,SLOT(quit())); 17     a.setMainWidget(&box); 18     box.show(); 19 return a.exec(); 20 }

在vc6.0下面编译运行程序之后我们会见到界面如下,这个时候就显示正常了。

代码分析:   上面的两段代码基本上是大同小异,没有多大的差别,程序的具体含义这里我不做介绍,只讲一下两段代码的区别,见上例中代码的黄色部分,该部分就是为中文显示所做出的改进。  setDefaultCodec(QTextCodec::codecForName("GBK")); 查阅了qt的函数帮助可知, setDefaultCodec的作用如下: void QApplication::setDefaultCodec ( QTextCodec * codec )  设置应用程序的默认编解码器为codec。  如果程序中的文字引用文本不是Latin1编码,这个函数可以用来设置合适的编码。例如,韩国程序员开发的软件在程序中对所有文本可以使用eucKR,这种情况下,main()函数可能看起来像这样:      int main(int argc, char** argv)     {         QApplication app(argc, argv);         ... install any additional codecs ...         app.setDefaultCodec( QTextCodec::codecForName("eucKR") );         ...     } 注意,这不是用户来选择编码的方式。例如,把一个包含英语字符串的应用程序转换为韩语,所需要做的一切就是对于所有的英语字符串通过tr()传递并且载入翻译文件。有关国际化的详细情况,请参考Qt国际化文档。  注意也有一些Qt内置类为不同的字符串调用tr()。这些字符串使用英语,所以对于完整的翻译,编解码器将被这些字符串需要。 QPushButton quit(QObject::tr("退出"),&box); tr()函数的说明如下: QString QObject::tr ( const char * sourceText, const char * comment ) const  返回sourceText的翻译版本,或者如果没有合适的版本返回sourceText它自己。翻译上下文是comment的QObject(默认为空)。所有使用Q_OBJECT宏的QObject对象有这个函数的重新实现,把子类名作为上下文。  也可以参考trUtf8()、QApplication::translate()和Qt中的国际化。  实例:network/networkprotocol/view.cpp。  QString QObject::trUtf8 ( const char * sourceText, const char * comment ) const  返回sourceText的翻译版本,或者如果没有合适的版本返回QString::fromUtf8(sourceText)。它是另一种tr(sourceText, comment)。  也可以参考tr()和QApplication::translate()。 

两个函数的作用一个用来设定字符集一个是用来进行字符串转化,刚好满足了前面提到的思路,事情就是这样的,呵呵,就写到这里,希望对你有用。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2011年05月27日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档