Qt中文显示

QT默认的编码(unicode)是不能显示中文的,可能由于windows的默认编码的问题,windows默认使用(GBK/GB2312/GB18030),所以需要来更改QT程序的编码来解决中文显示的问题。

QT中有专门的一个类来处理编码的问题(QTextCodec)。

在QT3中,QApplication可以设置程序的默认编码,但是在QT4中已经没有了该成员函数。
可以以下的这些方法来设置编码。

1. 设置QObject的成员函数tr()的编码。

QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));

其中的codecForName函数是根据参数中的编码名称,在系统已经安装的编码方案中需找最佳的匹配编码类型,该查找是大小写不敏感的。如果没有找到,就返回0。

具体的转换代码看下面:
#include <QApplication>
#include <QTextCodec>
#include <QLabel>

int main(int argc,char *argv[])
{
   QApplication app(argc,argv);
   QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
   QLabel hello(QObject::tr("你好世界"));
   hello.setWindowTitle(QObject::tr("Qt中文显示"));
   hello.show();
   return app.exec();
}

注意:
setCodecForTr一定要在QApplication后面。不然没有效果。而且这种方法只会转换经过tr函数的字符串,并不转换不经过tr函数的字符串。

技巧:
可以用codecForLocale函数来返回现在系统的默认编码,这样更容易做多编码的程序而不用自己手动来更改具体的编码。

2. 使用QString的fromLocal8Bit()函数

这个方法是最快的,系统直接自动将char *的参数转换成为系统默认的编码,然后返回一个QString。

#include <QApplication>
#include <QTextCodec>
#include <QLabel>

int main(int argc,char *argv[])
{

QApplication app(argc,argv);

QString str;
   str = str.fromLocal8Bit("Qt中文显示");
   hello.setWindowTitle(str);
   hello.show();
   return app.exec();
}

3. 用QTextCodec的toUnicode方法来显示中文

#include <QApplication>
#include <QTextCodec>
#include <QLabel>

int main(int argc,char *argv[])
{

QApplication app(argc,argv);
   QLabel hello(QObject::tr("你好世界").toLocal8Bit());
   QTextCodec *codec = QTextCodec::codecForLocale();
   QString a = codec->toUnicode("Qt中文显示");
   hello.setWindowTitle(a);
hello.show();
return app.exec();
}

时间: 2024-08-07 02:53:23

Qt中文显示的相关文章

QT 中文显示乱码问题

Qt中的中文显示,经常会出现乱码,但在UI设计界面上添加的中文是不会出现乱码的,如果你刚使用qt,那么你肯定会碰到这个问题. 最近用QT编程 发现QT乱码问题  .但大都说是编码问题 ,通研究分析 :出现乱码分为: 1编辑器显示乱码 ,特点是中文注释显示乱码. 解决办法:一般这种乱码是源代码由不同编辑器实现 ,出现代码不兼容 编辑器顶端会提示,然后点击右上角的编辑代码修改编码可以解决. 2软件字符乱码 一些常量  编辑器显示正常 软件运行乱码  界面显示乱码 使用此函数可以解决问题 QStrin

QT 中文显示问题

在QT4 中,要显示中文,都是要这样写: #include <QTextCodec> QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); 而在QT5中,取消了setCodecForTr 这个静态方法,所以不能再那么写了. 在QT5中,显示中文字符,只要再有中文字符的文件最上地方加上一句: #pragma executio

Qt支持中文显示

Qt支持中文显示<1>.在代码中添加以下代码QTextCodec* codec = QTextCodec::codecForLocale();if (codec != NULL){    QTextCodec::setCodecForLocale(codec);    QTextCodec::setCodecForCStrings(codec);    QTextCodec::setCodecForTr(codec);} <2>.在应用程序目录建立一个codecs文件夹,并将Qt对

关于Qt中 中文显示的解决办法

关于Qt中 中文显示的解决办法 在linux平台下,这样显示中文 QLabel *label = new QLabel; QTextCodec *codec = QTextCodec::codecForName("UTF-8"); label->setText(codec->toUnicode("<center><h1>你好</h1></center>"));  label->setWindowTit

嵌入式Linux下Qt的中文显示

一般情况下,嵌入式Qt界面需要中文显示,下面总结自己在项目中用到的可行的办法 1,下载一种中文简体字体,比如我用的是"方正准圆简体",把字体文件放在ARM开发板系统的Qt字库中,即/usr/lib/fonts下 2,添加ARM开发板上的环境变量,打开vi /etc/profile,添加 [cpp] view plain copy export QT_QWS_FONTDIR=/usr/lib/fonts 3,在main.cpp中,添加 [cpp] view plain copy QTex

Qt开发中文显示乱码

Qt开发中文显示乱码 来源 https://www.jianshu.com/p/ed269df8104d 参考 https://blog.csdn.net/J_H_C/article/details/93882284 为什么会出现乱码 首先,我们需要有的概念是乱码的问题是由编码和解码方式引起的.涉及到编码方式的地方有3个: 源码字符集 执行字符集 运行环境字符集 源码字符集确切的说是编译器认为源码文件的编码方式,执行字符集是可执行程序采用的编码方式,而运行环境字符集则是环境支持的编码方式.编译程

Ubuntu CTRL+ALT+F1~F6 进入命令模式后不支持中文显示的解决办法

前言 我在实验进入linux系统启动xwindow server而不启动KDE GNOME等桌面系统时遇到的问题.只启动x server而不启动桌面系统,在xserver之上运行一个全屏的图形界面程序,这样就能实现该程序对显示器的独占,对一般用户来说他就不能在这台电脑上搞别的动作了,只能用这个程序.一些工业控制.超市收银等应用场景下都会有这样的需求,目前这些程序都运行在windows xp (embeded)之下,也有运行于dos的.由于windows xp太被大众熟悉了,结果这些软件便不能稳定

解决osgEarth中文显示乱码的几种方法

解决osgEarth中文显示乱码的几种方法 在此感谢那些在路上那个帮助过别人的朋友,谢谢. 方法一: 通过自己写函数转换类型. 下面这三个函数先复制过去吧. void unicodeToUTF8(const std::wstring &src, std::string& result) { int n = WideCharToMultiByte( CP_UTF8, 0, src.c_str(), -1, 0, 0, 0, 0 ); result.resize(n); ::WideCharT

解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)——ubuntu环境设置默认是utf-8,文件编码可使用Encodersoft批量转换

一.Qt环境设置 文件从window上传到Ubuntu后会显示乱码,原因是因为ubuntu环境设置默认是utf-8,Windows默认都是GBK.Windows环境下,Qt Creator,菜单->工具->选项->文本编辑器->行为->文件编码:默认编码:System(简体中文windows系统默认指的是GBK编码,即下拉框选项里的GBK/windows-936-2000/CP936/MS936/windows-936) 二.编码知识科普Qt常见的两种编码是:UTF-8和GB