文档章节

Qt界面显示中文乱码问题

zjushawnelee88
 zjushawnelee88
发布于 2013/06/20 15:12
字数 553
阅读 17471
收藏 5
QT

解决方法,csdn上看来的,设置为系统字体,用三个

QTextCodec::setCodecForTr()

QTextCodec::setCodecForCStrings()

QTextCodec::setCodecForLocale()

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

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

    //Set Encode
    QTextCodec::setCodecForTr(QTextCodec::codecForName("system"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("system"));
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("system"));

    QDialog w;
    QLabel label(&w);
    label.setText("Hello World!你好,Qt!");   //attention!! 

    w.show();
    return a.exec();
}

另外一种方法,《QT快速入门》一书中的方法,只需要一个set,但是在label中填写文字的时候,需要

QObject::tr()

QTextCodec类提供了文本编码的转换功能。

QTextCodec类中的静态函数setCodecForTr()用来设置QObject::tr()函数所要使用的字符集。

QTextCodec::codecForLocale()返回了系统指定的字符集,QtextCodec::setCodecForTr()设置tr()用到的字符集。


总之,为了显示中文,需要设置字符集,然后使用QObject::tr()函数将字符串进行编码转换。

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

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


    QTextCodec::setCodecForTr(QTextCodec::codecForLocale());  //set
    //or the code below may work, not the same as the book told in P27
    //replace "UTF-8" with "GB2312"
    //QTextCodec::setCodecForTr(QTextCodec::codecForTheName("GB2312"));
    QDialog w;
    QLabel label(&w);
    label.setText(QObject::tr("Hello World!你好,Qt!"));   //attention!! QObject::tr() used.
    w.show();
    return a.exec();
}


Q:在qt的IDE中编写程序,如上,运行没问题,但是但是换成直接用command line编译,代码是直接拷贝过去的,运行出问题额:

A:后来发现时文件默认编码问题:

如果文件中有中文,则需要存储为UTF-8的格式,比如用IDE根据模板生成的示例工程2-1,

文件 编码
hellodialog.cpp ANSI
hellodialog.h ANSI
hellodialog.ui UTF-8
helloworld.pro ANSI
helloworld.pro.user ANSI
main.cpp ANSI

只有在界面当中直接输入了中文“Hello world!你好,Qt!",因此只有“hellodialog.ui”这个文件是“UTF-8格式”的。

而在范例2中(2-2),由于需要手动输入中文,故只有文件“main.cpp”的编码是“UTF-8”的。

 helloworld.pro ANSI
helloworld.pro.user ANSI
main.cpp UTF-8


用qt直接创建的文件默认编码为ANSI,中文则为UTF-8
而win7中直接创建文本文件默认编码为ANSI
我把自己创建的文件另存为UTF-8格式之后,再编译运行,没有问题了

编码问题参考:http://bbs.chinaunix.net/thread-753836-1-1.html



© 著作权归作者所有

共有 人打赏支持
zjushawnelee88
粉丝 3
博文 25
码字总数 23793
作品 0
杭州
程序员
Qt Creator编码设置--win7-vs2010

刚开始学习Qt5,记录下捣腾中发现的问题。 Qt Creator工具已经设置了”默认文件编码“为"UTF-8",pro项目文件中做了一些注释,注释都是中文,当我通过工具增加源码文件之后pro文件中的中文都...

Make42
2013/05/04
0
2
Qt5.0+msvc2010:解決中文乱码的问题

1、在Qt Creator的工具列,选择“工具”---->”选项“,进入设置界面 2、在弹出的设置界面里面,选择“文本编辑器”,选择“行为”选项卡,把“行为”选项卡下面的”默认编码“置成“UTF-8”...

花后叶
2014/01/06
843
0
Qt国际化(源码含中文时)的点滴分析

注意:本文不介绍如何使用Qt的国际化、本地化支持。本文针对的是偏底层的、Manual和其他资料中很少涉及的东西。所以,继续之前,请先确保:你已经对如何使用Qt的国际化比较熟悉了。 本文针对...

晨曦之光
2012/05/08
401
0
Qt中translate、tr关系 与中文问题

题外话:何时使用 tr ? 在论坛中漂,经常遇到有人遇到tr相关的问题。用tr的有两类人: (1)因为发现中文老出问题,然后搜索,发现很多人用tr,于是他也开始用tr (2)另一类人,确实是出于国际...

长平狐
2013/01/06
48
0
Qt中translate、tr关系 与中文问题

转自:http://hi.baidu.com/cyclone/blog/item/aa56e5dd1a79f7e176c638be.html 题外话:何时使用 tr ? 在论坛中漂,经常遇到有人遇到tr相关的问题。用tr的有两类人: (1)因为发现中文老出问...

长平狐
2013/01/11
527
0

没有更多内容

加载失败,请刷新页面

加载更多

idea 通过jpa自动生成实体类

引入jpa包 打开persistence窗口 右键选择连接数据库 如果数据库没配置,则可以在下图选项中配置 选择好数据库和实体类的生成地址

斩神魂
22分钟前
1
0