• 8294阅读
  • 8回复

[提问]怎么样获得QlineEdit中的中文信息,并将其使用? [复制链接]

上一主题 下一主题
离线zhangyouneng
 

只看楼主 倒序阅读 楼主  发表于: 2012-04-21
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —
关键词: 中文乱码
我是初学QT不久的新手,昨天碰到的问题,在QlineEdite中输入中文的信息,然后用std::cout<<QlineEidt->text().tostring<<std::endl;输出中文信息,然而结果是??
     我在网上搜了一些帖子,说可能是编码的问题,但是我对编码认知挺少,请大家解惑,谢谢咯
离线dbzhang800

只看该作者 1楼 发表于: 2012-04-21
那就先熟悉编码吧。在熟悉编码之前,最好不要在代码中用中文。不过等你熟悉之后,估计也不会在代码中用中文了。

国内的现状似乎是,对编码和各个C++编译器对中文支持似懂非懂的用户喜欢代码中用中文。导致一个问题就是,网上的大量相关内容,参考意义都不大。
离线roywillow

只看该作者 2楼 发表于: 2012-04-21
不过你非要用std::out来输出结果吗?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线wlcl
只看该作者 3楼 发表于: 2012-04-21
应该有如下可能,
第一:QT的程序的字符编码问题(个人觉得这部分可能性不大)
在 main.cpp 开始部分加上
    QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
    QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
相应的头文件,自己添加!

第二:
你的控制台字符编码问题,如果是windows,请确保可以在控制台下正常的输出中文。
如果是linux,请修改相应的配置文件,使得terminal可以显示中文!


同楼上问:你为什么非得使用cout来输出到控制台?
笔者前些天,一直因无法将控制台的输出结果无法弄到界面上而苦恼!
你倒好。。。 呵呵呵。。。 这个我觉得没必要!
离线dbzhang800

只看该作者 4楼 发表于: 2012-04-22
每次看到这么用 setCodecForXXX 的都让人很头疼,

不过Qt5中,这两个函数都完全消失了。
这对喜欢在代码中用中文的是一个 极好的消息。
离线roywillow

只看该作者 5楼 发表于: 2012-04-22
回 4楼(dbzhang800) 的帖子
消失之后如果直接在代码中用中文会出现问题吗?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线dbzhang800

只看该作者 6楼 发表于: 2012-04-22
Re:回 4楼(dbzhang800) 的帖子
引用第5楼roywillow于2012-04-22 10:00发表的 回 4楼(dbzhang800) 的帖子 :
消失之后如果直接在代码中用中文会出现问题吗?

当然,这样一来,会直接将C++对中文支持的问题直接暴露给大家。但和这些总被滥用且问题多多的 setCodecForXXXX 比起来,是一个进步。

去掉以后,只要在ANSI C++中 对中文应付自如,那么在Qt中也不会有问题,如果在Qt中遇到问题,那么就是纯C++的问题。

真正的问题是,即便是到了C++11,仍未能完全解决这个问题。如果想在夸平台的C++程序中直接使用中文,还需要祈求编译器能提供比较一致编码支持。
离线zooood
只看该作者 7楼 发表于: 2012-04-22
前几天还为中文头疼

我觉得编码方面,需要先搞清楚一个基本问题:
.h和.cpp文件中的代码是带编码的,win下一般是GB编码
QString内部表示也是带编码的,默认是unicode
如果代码文件里的中文不是unicode编码,就会和QString内部编码不一致

QTextCodec::setCodecForXX(QTextCodec::codecForLocale())实际上就是告诉qt在把代码中的字符串作为函数参数的时候,要先做一个本地系统编码到unicode的转换。

但是这样总觉得别扭。

我在代码中全用英文,实在要用中文的地方就用汉语拼音,然后用qt linguist做国际化,这样比较方便

偶也是新手,一起探讨学习
离线zhangyouneng

只看该作者 8楼 发表于: 2012-04-22
不好意思,今天上午停电,现在刚恢复供电,纠结。。。
         至于我为什么需要用cout来输出,这是因为,我需要QlineEdite中的内容,由于我是在linux下面是用occi来连接数据路,sql语句中的一些判定或者条件,就需要用到QlineEdite中的内容,而当QlineEdite的内容是中文信息的时候,用cout 输出sql语句就会出现下面的情况:
   insert into test  values  (seq_text.nextval,'???','????'..... );
   因此添加到数据库的信息中就出现了???
   当我从数据库中提取中文信息的时候,得到的内容 也是???
快速回复
限100 字节
 
上一个 下一个