QT5 中文乱码问题

qt是跨平台的开发平台。他的编译器是要手动配置的,在window下一般我们用virtual stuido中cl,或者Mingw中的g++

在linux中一般采用Linux下的g++

 

而  微软VS的中的cl,Mingw中的g++,Linux下的g++),源代码分别采用 GBK 和 不带BOM的UTF-8  以及 带BOM的UTF-8 这3中编码进行保存。

也就是说编译器的编码方式是不同的,所以大部分情况我们在qt代码中写中文时就会有乱码

网上搜索得出  

这两段代码可以解决大部分的乱码问题。(记得加入#include<QTextCodec> 头文件引用

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));

 

其实上面的代码的意思是告诉编译器我们用什么样的编码方式来解读我们写的代码。 一般在使用微软的编译器 我们在main函数中

QApplicationa(argc,argv);之后加入QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));。

使用g++编译器我们使用QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));

 

第2种方法

Qt5中,一些函数已经被取消了,而且网上很多都是不推荐这种写法。所以当时找到的是自行转换:

    QTextCodec * BianMa = QTextCodec::codecForName ( "GBK" );
    QMessageBox::information(this, "提示", BianMa->toUnicode("中文显示!"));

image

其实也可以通过QString定义的静态函数,先转换成Unicode类型:

QString::fromLocal8Bit("提示")

不过在Qt5中,提供了一个专门的处理宏,来支持中文常量,那就是QStringLiteral,但它只能处理常量。

QMessageBox::information(this, QString::fromLocal8Bit("提示"), QStringLiteral("中文显示"));

image

    const char* info = "中文显示";
    //不支持
    QString strInfo = QStringLiteral(info);
    //支持
    QString strInfo = QString::fromLocal8Bit(info);

对于中文常量,使用QStringLiteral即可解决,对于字符串变量,使用QString自带函数也可以轻松解决。

转自:https://www.cnblogs.com/Bonker/p/3617982.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值