首页| 论坛| 消息

标题:QT linux下显示中文
作者:donby
日期:2011-08-11 10:09
内容:

问题如标题显示的
我在window 7上跑QT可以显示
但在linux上跑会无法显示中文
想请问是怎回事呢?
我的linux版本为Ubuntu 10.04
QTE版本为4.7.1
以下是我简单的范例:
在windows 7上
#include
#include
#include
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QmlApplicationViewer viewer;
QTextCodec *codec = QTextCodec::codecForName("System");
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
char str[10] = "你好";
QString qstr = "哈囉";
qDebug()


#1 [wangshengdi 08-11 11:31]
我就把qt下的codes放到可执行文件同一目录下
a.addLibraryPath(QString("./"));
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForTr(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForLocale(codec);
#2 [donby 08-11 14:05]
感谢楼上大大回复
后来问题解决了
主要是参考这篇文章
http://hi.baidu.com/cyclone/blog/item/9d7293130e5a498d6538dbf1.html
内容讲的很详细
另外讲个题外话
有时后我想要把QString存成char*的形式并且存到挡案
如果在main.cpp中使用
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
这行指令
不知道为啥会出现 QT buffer overflow detected 的错误讯習
不加入此行就不会当掉
但如此一来要怎把QString转成char*呢?
我的方法如下

QString qstr = "我是汉字";
char str[10] = "";
假设要把qstr存给str,最后存到挡案
strcpy(str, qstr.toLocal8Bit().data());
此时str内容已经是"我是汉字"了,只是你直接印出来会变成乱码
读挡时想要把 str转成QString:
QString qstr2 = QString::fromLocal8Bit(str, -1);
这样印出qstr2就会是"我是汉字"了
这样即使不用include QTextCodec还有在main.cpp加入
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
也可以转
以上是我的做法~如果观念或作法有错
也请大家不吝指教啰
最后~我还是搞不懂为啥会出现 QT buffer overflow detected 的错误讯习
这部份可能就请高人来指点了 @@"

回复 发表
主题 版块