当前位置:编程学习 > wap >>

linux下,Qt无法显示中文

--------------------编程问答-------------------- 尝试3:
我要是直接在cpp文件里,写代码加入一个QPushButton按钮。
QPushButton *button = new QPushButton(this);
button->setText("可发送到件客服");

这种情况下,编译后button上显示的是乱码。

怀疑:难道在ui文件中直接写中文,qt的翻译函数没实现吗? --------------------编程问答-------------------- 下载软件中心里面的Qt版本。一般自己编译的都会出现乱码问题。不过网上有qtconfig来解决的。可以试一下。 --------------------编程问答--------------------
引用 2 楼 ying_593254979 的回复:
下载软件中心里面的Qt版本。一般自己编译的都会出现乱码问题。不过网上有qtconfig来解决的。可以试一下。


我也发现对方的帖子了。http://www.cnblogs.com/wdxez/articles/2498701.html
可是,我的qtconfig里面根本就没有中文字库啊。
--------------------编程问答-------------------- 移植的话得看看你要移植的内个系统有没有字库,linux下汉字编码是UTF-8格式的,为什么不直接在linux系统下安装linux版本的Qt进行Qt编程 --------------------编程问答-------------------- 因为你的文件源码格式不是gb2312, 需要如下修改:Tools->Options->Text Editor->File Encodeings->Default encoding->...改成GB2312
然后需要强制把你的源码save一次,譬如加个空格,然后save,就可以把源码格式改成gb2312了. --------------------编程问答--------------------
引用 4 楼 u010194208 的回复:
移植的话得看看你要移植的内个系统有没有字库,linux下汉字编码是UTF-8格式的,为什么不直接在linux系统下安装linux版本的Qt进行Qt编程


我用的就是qt-everywhere-opensource-src-4.7.4.tar.gz,直接在fedora下编译的。 --------------------编程问答--------------------
引用 5 楼 nlstone 的回复:
因为你的文件源码格式不是gb2312, 需要如下修改:Tools->Options->Text Editor->File Encodeings->Default encoding->...改成GB2312
然后需要强制把你的源码save一次,譬如加个空格,然后save,就可以把源码格式改成gb2312了.


你说的这个方法,我实验过了。没有作用啊。

实际上,我就在fedora上新建立一个空qt项目,它本身编码全是UTF-8的。无法显示中文,就算都改成gb2312还是没有中文显示出来。


我就纳闷是不是我的系统环境缺了什么呢?
我是fedora15英文系统,后来手动改成中文的。
qt是linux的4.7.4源码编译的。
输入法是ibus的pinyin输入法。

貌似我自己编译的qt文件夹下,没有中文fonts。是不是这个原因啊? --------------------编程问答-------------------- 自己编译是不行的,跟系统很多都不兼容,建议下载软件中心里面的qt --------------------编程问答--------------------
引用 7 楼 qimo601 的回复:
Quote: 引用 5 楼 nlstone 的回复:

因为你的文件源码格式不是gb2312, 需要如下修改:Tools->Options->Text Editor->File Encodeings->Default encoding->...改成GB2312
然后需要强制把你的源码save一次,譬如加个空格,然后save,就可以把源码格式改成gb2312了.


你说的这个方法,我实验过了。没有作用啊。

实际上,我就在fedora上新建立一个空qt项目,它本身编码全是UTF-8的。无法显示中文,就算都改成gb2312还是没有中文显示出来。


我就纳闷是不是我的系统环境缺了什么呢?
我是fedora15英文系统,后来手动改成中文的。
qt是linux的4.7.4源码编译的。
输入法是ibus的pinyin输入法。

貌似我自己编译的qt文件夹下,没有中文fonts。是不是这个原因啊?

吧中文字库放到你编译下的Qt fonts文件下,你这个和下位机没字库的比较类似 --------------------编程问答--------------------
引用 8 楼 ying_593254979 的回复:
自己编译是不行的,跟系统很多都不兼容,建议下载软件中心里面的qt


fedora15的software management  中的qt最高就是4.7.2版本的。不利于我以后自由选择版本啊。能不能自己手动编译想要的版本呢? --------------------编程问答--------------------
引用
吧中文字库放到你编译下的Qt fonts文件下,你这个和下位机没字库的比较类似

是啊。你说的方法是开发板里面需要的。这种上位机操作系统,还需要我手动添加中文字体库吗?
感觉是哪里中文支持包没安装好似的。

原先我的fedora是英文的。我安装了
yum install kde-i18n-Chinese.noarch  kde-l10n-Chinese.noarch 
变成中文操作系统了,可是还是不行啊。

我发现在qtconfig应用里面也没发现任何字库。难道真的是没有安装中文字库吗? --------------------编程问答-------------------- 换个版本的试试,我装4.8.5的时候就出不来汉字,装了个4.6.3好了 --------------------编程问答--------------------
引用 12 楼 u010194208 的回复:
换个版本的试试,我装4.8.5的时候就出不来汉字,装了个4.6.3好了
谢谢了。


我研究了3天,找到最后的解决方法了。
在这个帖子里总结了:主要原因是qt的fontconfig没安装。
http://blog.163.com/qimo601@126/blog/static/15822093201382611615112/ --------------------编程问答--------------------
引用 1 楼 qimo601 的回复:
尝试3:
我要是直接在cpp文件里,写代码加入一个QPushButton按钮。
QPushButton *button = new QPushButton(this);
button->setText("可发送到件客服");

这种情况下,编译后button上显示的是乱码。

怀疑:难道在ui文件中直接写中文,qt的翻译函数没实现吗?


QPushButton *button = new QPushButton(this);
button->setText(tr("可发送到件客服")); --------------------编程问答-------------------- 今天中午自己编译了一下。添加一些系统字库过后。可以正常显示中文和字体。 --------------------编程问答-------------------- 不建议直接在源代码中直接写汉字。 --------------------编程问答--------------------
引用 7 楼 qimo601 的回复:
Quote: 引用 5 楼 nlstone 的回复:

因为你的文件源码格式不是gb2312, 需要如下修改:Tools->Options->Text Editor->File Encodeings->Default encoding->...改成GB2312
然后需要强制把你的源码save一次,譬如加个空格,然后save,就可以把源码格式改成gb2312了.


你说的这个方法,我实验过了。没有作用啊。

实际上,我就在fedora上新建立一个空qt项目,它本身编码全是UTF-8的。无法显示中文,就算都改成gb2312还是没有中文显示出来。


我就纳闷是不是我的系统环境缺了什么呢?
我是fedora15英文系统,后来手动改成中文的。
qt是linux的4.7.4源码编译的。
输入法是ibus的pinyin输入法。

貌似我自己编译的qt文件夹下,没有中文fonts。是不是这个原因啊?


看了一下你的总结文章,还不完全,补充一下:
前面freetype是解决Qt Creator显示的问题。
后面看你的备注说Linux下面源码默认是utf8,不需处理textcodec, 这个说法是不完整的。
如果你是直接在designer里面写的中文是不需要的,因为Qt会对这些文字作translate,并且显示的指定字符编码为UTF8,这样程序才能够识别,具体代码可参见ui文件生成的ui_XXXX.h.
Qt5以前的版本,QString, tr()都是默认源字符编码为lating-1(近似于ascii),所以出现在源码中的""和tr("")都是默认不支持中文到QString的转换的,这些文本必须指定全局的setCodecForCStrings之似的函数,或者在局部调用fromutf8()之类的函数调用才能正确转码到QString里。
注: QString里存贮的其实是utf16编码.

Qt5以后会把这个默认lating-1改成默认utf8,用来简化上述的处理。 --------------------编程问答-------------------- 跟5L观点相同 --------------------编程问答-------------------- 我也遇到过类似情况,应该是属于编码问题,在linux下用gedit打开相关文件,选择UFT-8编码,再转到QT CREATOR即可编辑 --------------------编程问答--------------------
看了一下你的总结文章,还不完全,补充一下:
前面freetype是解决Qt Creator显示的问题。
后面看你的备注说Linux下面源码默认是utf8,不需处理textcodec, 这个说法是不完整的。
如果你是直接在designer里面写的中文是不需要的,因为Qt会对这些文字作translate,并且显示的指定字符编码为UTF8,这样程序才能够识别,具体代码可参见ui文件生成的ui_XXXX.h.
Qt5以前的版本,QString, tr()都是默认源字符编码为lating-1(近似于ascii),所以出现在源码中的""和tr("")都是默认不支持中文到QString的转换的,这些文本必须指定全局的setCodecForCStrings之似的函数,或者在局部调用fromutf8()之类的函数调用才能正确转码到QString里。
注: QString里存贮的其实是utf16编码.

Qt5以后会把这个默认lating-1改成默认utf8,用来简化上述的处理。

谢谢你,你分析的很对。
1、freetype是解决Qt Creator显示的问题。
2、这段全局转换编码的代码,linux下,在main函数里,确实还需要的。
 QTextCodec *codec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForTr(codec);
    QTextCodec::setCodecForLocale(codec);
    QTextCodec::setCodecForCStrings(codec);
还是你对本质理解透彻。

补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,