精华内容
下载资源
问答
  • QT中文显示乱码解决方式

    千次阅读 2020-04-15 14:35:14
    本篇简单介绍中文显示乱码解决的几种方式。 一. 对于QT5.0以上的版本(含) QString::fromLocal8Bit("中文"); 二. 对于QT5.0以下的版本 上一种方式可以使用,也可以使用下面的方式: 在main.cpp修改为如下...

    目录

    一. 对于QT5.0以上的版本(含)

    二. 对于QT5.0以下的版本

    三. QT语言家

    四. Demo/相关包


     

    本篇简单介绍中文显示乱码解决的几种方式。

    一. 对于QT5.0以上的版本(含)

    QString::fromLocal8Bit("中文");

     

    二. 对于QT5.0以下的版本

    上一种方式可以使用,也可以使用下面的方式:

    在main.cpp修改为如下代码段

    #include <QTextCodec>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    
        //解决中文乱码
        //QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK")); 
        QTextCodec::setCodecForTr(QTextCodec::codecForName("system"));    //若英文系统,则用GBK
        QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
        QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
    
        CMainWindow w;
        w.show();
        
        return a.exec();
    }

    在引用时,前面加入tr:

    tr("中文");

     

    三. QT语言家

    中大型项目,对于代码非常严苛的,可使用此种方法,避免在代码加入中文字串,用于Release版本。

    1. 在.pro工程文件,加入

    TRANSLATIONS += linguist_CN.ts

    2. 点击QT Creator的菜单栏->Tools->Extenal->Linguist->Update Translations

    更新翻译后,会在工程目录下,生成linguist_CN.ts文件。

    3. 点击你自己电脑开始菜单栏->所有程序,找到入下图的Linguist语言家工具

    在语言家工具里,打开linguist_CN.ts文件,选择自己需要修改的译文,每改一处要点一次绿勾确认。

    完成查看,绿勾勾上的,是你改过的翻译;点击保存按键;

    再点击文件->发布,在工程目录下,会生成linguist_CN.qm文件,此文件就是翻译后的文件

    4. 回到QT Cretor工程,在main.cpp,加入如下代码

    #include <QTranslator> //新增
    
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    
        QTranslator translator; //新建翻译类
        translator.load("linguist_CN"); //导入生成的文件
        a.installTranslator(&translator); //装入
    
        MainWindow w;
        w.show();
        
        return a.exec();
    }

    编译为Release版本后,把linguist_CN.qm放入Release同级目录下,添加相关运行库,即可运行(库在电脑C盘有,不知道位置可以百度)。

     

    四. Demo/相关包

    另附QT语言家的Demo供大家参考(百度云盘):

    链接: https://pan.baidu.com/s/1970CAdXQ7YepRA5UwaKh0Q 提取码: wrh4

     

    展开全文
  • Qt中文显示乱码解决方法

    万次阅读 2019-05-02 11:00:23
    Qt中文显示乱码解决方法 一、Qt4中的解决方法 方法1:在程序开始时增加初始编码类型 #include < QTextCodec > int main(int argc, char **argv) { .................... QTextCodec::setCodecForTr(QTextCodec...

    Qt中文显示乱码解决方法
    一、Qt4中的解决方法
    方法1:在程序开始时增加初始编码类型
    #include < QTextCodec >
    int main(int argc, char **argv)
    {
    ....................
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF8"));
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF8"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF8"));
    ..........................
    }
    Qt5中, 取消了QTextCodec::setCodecForTr()和QTextCodec::setCodecForCString()这两个函数,而且网上很多都是不推荐这种写法。
    方法2:直接转换
    加上#include <qtextcodec.h> 
    QTextCodec *codec = QTextCodec::codecForName("GBK");//修改这两行 
    w.setWindowTitle(codec->toUnicode("中文按钮")); 
    完整代码:

    #include "helloqt.h"
    #include <QtWidgets/QApplication>
    #include <qlabel.h>
    #include <qtextcodec.h>
     
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        HelloQt w;
        QTextCodec *codec = QTextCodec::codecForName("GBK");
        w.setWindowTitle(codec->toUnicode("中文按钮"));
        w.resize(300, 140);
     
        QLabel label("test",&w);
        label.setGeometry(100, 50, 160, 30);
        w.show();
        return a.exec();
    }


    二、Qt5中的解决方法
    方法1:先将对应的cpp文件用windows自带的记事本打开,另存为UTF-8格式,然后在代码中,遇到中文字符,使用QStringLiteral("中文")进行修饰。这种方式每次新建一个class就要切出去用记事本编辑一下实在麻烦,而且每个中文字符串都要用QStringLiteral来修饰,实在麻烦。

    #include "helloqt.h"
    #include <QtWidgets/QApplication>
    #include <qlabel.h>
     
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        HelloQt w;
        w.setWindowTitle(QStringLiteral("中文按钮"));
        w.resize(300, 140);
     
        QLabel label("test",&w);
        label.setGeometry(100, 50, 160, 30);
        w.show();
        return a.exec();
    }


    方法2:在头文件申明中加上
    #pragma execution_character_set("utf-8")
    方法3:直接转换
    加上#include <qtextcodec.h> 
    QTextCodec *codec = QTextCodec::codecForName("GBK");//修改这两行 
    w.setWindowTitle(codec->toUnicode("中文按钮")); 

    展开全文
  • Qt显示汉字乱码问题

    千次阅读 2018-02-03 15:55:17
    同时可以看到此时Notepad++显示文件内容使用的编码是ANSI,即本地编码,可以正确的显示汉字。那就说明,编译生成*.obj目标文件时,编译器将源码中的字符串由UTF-8 BOM转换成了本地编码。 接下来查看test.exe的...

    转载自http://blog.csdn.net/u012790503/article/details/52485263

    测试1

    新建test工程用于测试,main.c文件内容如下:

    #include <QCoreApplication>
    #include <QDebug>
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        QString str_hanzi("百度"); // 汉字
        QString str_ascii("baidu.com"); // 字母
    
        qDebug() << str_hanzi;
        qDebug() << str_ascii;
    
        return a.exec();
    }
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    运行, 输出结果如下: 
    这里写图片描述

    不出意料的乱码。

    下面开始分析。

    此时,源代码main.c的编码是UTF-8 BOM。 
    这里写图片描述

    使用Notepad++查看,编码也是UTF-8 BOM。说明的确是UTF-8编码。

    查看目标文件main.obj,目标文件路径如下: 
    这里写图片描述

    使用Notepad++打开,搜索”百度”二字,结果如下: 
    这里写图片描述
    同时可以看到此时Notepad++显示文件内容使用的编码是ANSI,即本地编码,可以正确的显示汉字。那就说明,编译生成*.obj目标文件时,编译器将源码中的字符串由UTF-8 BOM转换成了本地编码。

    接下来查看test.exe的内容,同样搜索”百度”二字,如下图: 
    这里写图片描述
    和理论一样,因为.exe文件就是.obj文件链接起来生成的。

    到此为止,我们可以看到,源码中的汉字字符串在生成可执行文件的过程中被转换成了本地编码(实际上不止汉字,字母也会被转换)。

    那么和乱码有什么关系呢? 
    我们知道,Qt内部是使用Unicode编码的,即QString保存的是Unicode编码的字符串。所有使用QString的函数都认为QString内部是Unicode字符串。 
    那么,当test.exe执行的时候,它在读取”百度”二字的时候,它认为该字符串是Unicode编码,而实际上呢?是本地编码。乱码问题发生的时机就在于此。 
    这样一来,乱码的根本原因就一目了然了。

    那么,那些QTextCodec类以及QString::fromLocal8bit的作用和原理是什么呢?

    先说QSring::fromLocal8bit吧,这个比较简单,意思就是从一个本地编码的字符串生成一个QString字符串(Unicode),这样的话,将该字符串传递给其他函数,就不会出现乱码了。实验之,首先修改程序如下:

    #include <QCoreApplication>
    #include <QDebug>
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        QString str_hanzi("百度"); // 汉字
        QString str_ascii("baidu.com"); // 字母
    
        qDebug() << QString::fromLocal8Bit("百度"); // 修改了此处
        qDebug() << str_ascii;
    
        return a.exec();
    }
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    输出结果: 
    这里写图片描述 
    可以看到它实现了汉字的正常的显示,和理论相同。

    那么QTextCodec这个类是做什么的呢? 
    顾名思义,它的中文名应该是”文本编码转换器”(Text coding converter),下面是网上流传的一段代码:

    QTextCodec *codec = QTextCodec::codecForName("GBK");
    QTextCodec::setCodecForTr(codec);
    QTextCodec::setCodecForLocale(codec);
    QTextCodec::setCodecForCStrings(codec);
     
    • 1
    • 2
    • 3
    • 4

    下面修改程序:

    #include <QCoreApplication>
    
    #include <QDebug>
    #include <QTextCodec>
    #include <QFile>
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        QTextCodec *codec = QTextCodec::codecForName("GBK");
        QTextCodec::setCodecForTr(codec);
    
        QString str_hanzi("百度"); // 汉字
        QString str_ascii("baidu.com"); // 字母
    
    
        qDebug() << QString::fromLocal8Bit("百度");
        qDebug() << str_ascii;
        qDebug() << QObject::tr("百度");
    
        return a.exec();
    }
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    输出结果: 
    这里写图片描述

    可以看到,这种方法也能实现正确显示汉字。 
    但是这种方法的原理是什么? 
    关键在于QObject::tr()函数。它是翻译函数(translate),同时会进行编码转换。它的默认行为是认为传入的参数是Unicode编码,不需要转换。当你在程序中添加了设置tr编码格式的代码(如上面的程序,设置为GBK)时,会导致编码从你指定的编码(GBK)转换成Unicode。如果把上面的程序中的GBK改成UTF-8,则会乱码,因为该字符串的真正编码是本地编码GBK。实验结果如下图: 
    这里写图片描述

    同理,如果将本地编码设置成其他编码,修改代码如下

    #include <QCoreApplication>
    #include <QDebug>
    #include <QTextCodec>
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        QTextCodec *codec = QTextCodec::codecForName("UTF-8");
        QTextCodec::setCodecForLocale(codec);
    
        QString str_hanzi("百度"); // 汉字
        QString str_ascii("baidu.com"); // 字母
    
    
        qDebug() << QString::fromLocal8Bit("百度");
        qDebug() << str_ascii;
        qDebug() << QObject::tr("百度");
    
        return a.exec();
    }
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    这样的话,使用QString::fromLocal8bit的转换就会不正确,结果如下图: 
    这里写图片描述

    出乎意料的是,tr的转换也出错了。将UTF-8改回GBK,tr也还是乱码: 
    这里写图片描述

    于是添加一行QTextCodec::setCodecForTr(codec);,则显示正确。它们之间会相互干扰,这是我们没有预料到的,不过还好这不是什么大问题,可以通过显式设置来纠正。

    结论

    说了那么多,总结如下: 
    1、exe中的字符串编码始终是本地编码,与源代码文件的编码无关。 
    2、Qt内部需要使用Unicode编码的字符串才能正确处理(显示等操作)。 
    3、由于二者不同,所以对于汉字来说,必须经过转换,第一是通过QString::fromLocal8bit函数来转换,第二是通过QTextCodec来转换。但是setTextCodecForTr、setTextCodecForLocale在高版本已被移除。

    注意: 
    上述测试使用的是Qt4.8.5 msvc2010的版本。minGW还未测试,如果能直接在生成exe文件时直接生成Unicode字符串,那就不需要转换了。

    另外还有一种防止乱码的方法,此种方法也可以解决国际化问题导致的乱码,就是使用翻译文件。在源码中统一使用英文。在翻译文件中实现不同版本的语言。

    不得不提最后一种比较高级的方法:QStringLiteral宏。它可以直接生成Unicode字符串保存在可执行文件中的只读区域。这样运行时不会发生任何转换。可以显著提高程序运行效率。 
    测试代码如下:

    #include <QCoreApplication>
    #include <QDebug>
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        QString str_ascii("baidu.com"); // 字母
    
        qDebug() << QStringLiteral("a百度a");
        qDebug() << str_ascii;
    
        return a.exec();
    }
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    生成的可执行文件再也找不到”百度”二字了。

    但是QStringLiteral需要编译器支持,如支持C++11就具有这种特性。Qt高版本一般也支持。具体性能方面的影响请看Qt的帮助文档。

    展开全文
  • Qt 5.9.6 中文显示乱码

    文档声明:
    以下资料均属于本人在学习过程中产出的学习笔记,如果错误或者遗漏之处,请多多指正。并且该文档在后期会随着学习的深入不断补充完善。


    资料仅供学习交流使用。
    作者:Aliven888

    1、Qt 5.9.6 中文显示乱码

    环境:vs2015搭建的Qt编译环境,Qt版本是5.9.6。
    项目工程字符集使用的 Unicode 字符集。

    1.1、解决方案

    工程属性参数配置如下:
    在这里插入图片描述

    演示代码:

    #include "QtGuiApplication.h"
    #include <QtWidgets/QApplication>
    
    //解决中文乱码的缺陷
    #ifdef WIN32
    #pragma execution_character_set("utf-8")
    #endif
    
    int main(int argc, char *argv[])
    {
    	QApplication a(argc, argv);
    	QtGuiApplication w;
    	w.show();
    	return a.exec();
    }
    
    

    添加前:
    在这里插入图片描述

    添加后:
    在这里插入图片描述

    1.2、注意事项

    1、只有在某个UI对应的 xxx.h添加了该语句后,该UI中的中文才会正常显示,未添加的依旧是乱码;所以建议将该语句放到一个公共的工具文件(xxx.h) 中,因为工具文件中的工具函数很多类都会使用,这样的话,就不用每个UI的xxx.h文件都写一次了。

    2、Qt Create 中解决中文乱码

    环境:Qt Create 编译器中使用的。

    方案一:

    //Qt4.x 中使用
    
    //头文件:
    include<QTextCodec>
    
    //在main函数中的 QApplication app(argc,argv);之后添加如下代码    
    
    QTextCodec *codec = QTextCodec::codecForName("GBK");
    QTextCodec::setCodecForTr(codec);
    QTextCodec::setCodecForLocale(codec);
    QTextCodec::setCodecForCStrings(codec);
    
    
    

    方案二:

    //Qt5.x 中使用
    include<QTextCodec>
    
    //在main函数中的 QApplication app(argc,argv);之后添加如下代码   
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF8"));
    
    

    方案三:

    在Qt Create编辑器菜单栏中进入 工具 -> 选项,然后 选择 文本编辑器 -> 行为 -> 文件编码 -> 选择utf8, 详见如下图示。

    因为这里是在Qt Create编辑器中进行的开发配置工作,因为使用了任何版本的。

    在这里插入图片描述

    3、笔记跟新记录

    时间内容
    2020-09-06创建笔记
    2020-10-05添加第2小节
    展开全文
  • 1.界面控件显示乱码 2.打开文本乱码 3.接收信息乱码 4.控制台输出乱码 5.打开文件注释乱码 1.乱码的原因 这个博客解释的很详细,也有很多例子去区分:https://www.cnblogs.com/lsgxeva/p/12161743.html 2.过去乱码...
  • Qt中文乱码原因及解决方案

    万次阅读 2019-07-08 09:19:52
    本文主要分析了基于windows系统msvc2013编译器的Qt中文乱码。 概念 字库表:是一个系统支持的文字,符号,数字的集合。 编码字符集(字符集):我们平时所说的字符集就是这个,计算机以二进制的形式存储字符,每个字符...
  • VS+Qt应用开发-解决Qt中文显示乱码问题现象解决方法 现象 Qt在默认情况下显示中文字符会出现乱码的情况,如下代码对应的界面: QMessageBox::warning(this, "警告!", "出现问题!请解决!"); 解决方法 方法1:...
  • Qt中文显示乱码

    2017-02-06 22:26:17
    Qt需要在main()函数指定使用的字符编码:#include <QTextCodec>QTextCodec *codec = QTextCodec::codecForName("GBK");//情况1QTextCodec::setCodecForTr(codec); QTextCodec::setCodecForLocale(codec); QTextCodec:...
  • 解决qt中文显示乱码的问题

    千次阅读 2017-02-23 18:52:12
    首先进入设置,作如下设置 然后,新建一个代码文件(.h .cpp .c ….)都可以 在新建文件的编辑框右击,选择保存为带bom的UTF8格式 这样子保存之后,代码里面的中文就可以直接显示在Widget上面而不会出现乱码了。...
  • QT5 中文显示乱码问题的解决

    万次阅读 2019-01-09 15:49:57
    1. 之前QT4版本中文乱码解决办法是在main.cpp文件加入: #include &lt;QTextCodec&gt; int main(int argc, char **argv) { ...... // 以下部分解决中文乱码 QTextCodec *codec = QTextCodec::...
  • QT5中文显示出现乱码

    千次阅读 2016-03-13 17:06:15
    Qt中的中文显示,经常会出现乱码。这次自己学习QT,遇到的第一个问题就是中文乱码。看了一些博客,五花八门,不过好在还是得到了解决! 网上搜索一下,找到的都是这种: #include int main(int argc, char **...
  • QT中存在比较麻烦的中文乱码问题,解决方法如下: QT4解决方法: QTextCodec *codec = QTextCodec::codecForName("gbk"); QTextCodec::setCodecForLocale(codec); QTextCodec::setCodecForCStrings(codec); ...
  • QT5 中文显示乱码问题

    千次阅读 2018-08-26 19:21:59
    Qt中的中文显示,经常会出现乱码。从网上看了一些博客,大都是Qt4中的解决方法,  网上搜到的都是这种: #include &lt; QTextCodec &gt; int main(int argc, char **argv) { .................... ...
  • 本人使用的是编译环境是msvc_2015-64,在程序运行后,出现以下乱码,出现两种乱码的原因是,出现第一种乱码后,去百度 找答案,尝试多种方法后,又出现第二种乱码…,但是,这两种都可以用根本解决方案解决。 解决...
  • Qt5显示中文乱码的解决方法

    千次阅读 2020-04-10 14:43:30
    QT5控件的中文字符显示乱码如图所示: 解决的方法: 在头文件的下面加上: #pragma execution_character_set("utf-8") 运行结果:
  • Qt界面显示乱码问题vi编辑器转换编码格式调用Qt内部的编码转换函数 vi编辑器转换编码格式 windows编码格式:GBK Linux编码格式:UTF-8 Qt应用程序编程接口及其内部实现:UTF-16 在linux环境编写UTF-8格式的代码,...
  • qt vs 中文乱码

    2020-08-27 17:08:27
    QString显示中文乱码的原因: Qt5中QString内部采用unicode字符集,utf-16编码。构造函数QString::QString(const char *str)默认使用fromUtf8()将str所指的执行字符集从utf-8转码成utf-16。 由上面fromUtf8()可知,...
  • 程序显示汉字乱码,这是因为汉字需要用2个字节来进行编码,英文用一个字节编码。所以得使用占2个字节的变量类型来存放汉字。 (1)char类型,占一个字节,char ch = ‘s’; wchar_t类型宽字符,一个whcart_t占2...
  • 中文显示乱码问题处理方式 在文件头部加入 #pragma execution_character_set(“utf-8”) 如图:
  • 关于linux下 qt显示中文乱码的问题

    千次阅读 2018-10-30 15:41:35
    刚学qt,需要在标签中输入“新窗口”三个字,结果出来是乱码,像这样 查了下简单粗暴的解决办法: #include &lt;QTextCodec&gt; QTextCodec::setCodecForCStrings(QTextCodec::codecForName("...
  • QT5 解决中文显示乱码问题

    万次阅读 多人点赞 2018-09-03 13:57:23
    Qt中的中文显示,经常会出现乱码。从网上看了一些博客,大都是Qt4中的解决方法,  网上搜到的都是这种: #include &lt; QTextCodec &gt; int main(int argc, char **argv) { .................... ...
  • Qt界面显示中文乱码

    2020-04-13 13:58:45
    qt界面出现乱码,经过分析发现可能原因是编码问题,在Qt 中,采用编码方式为UTF-8方式, 正常的中文设置文本显示时会出现乱码情况;在百度了一下,大多数情况使用如下可以解决: QTextCodec *codec = QTextCodec::...
  • 解决QT在windows环境下出现乱码现象只需在project.pro 中添加 msvc { QMAKE_CFLAGS += /utf-8 QMAKE_CXXFLAGS += /utf-8 } 亲测可用。
  • Qt中文显示乱码问题

    2020-05-31 19:04:26
    Qt中文显示乱码问题 Qt默认的编码是unicode,不能显示中文;在使用Qt编程时,可以用fromLocal8bit()函数来实现从本地字符集到unicode的转换,处理汉语显示乱码的问题。 可以通过宏定义来简化QString::fromLocal8bit...
  • qt5中文乱码 添加#include <qtextcodec.h> QTextCodec codec = QTextCodec::codecForName(“GBK”); btn -> setText*(**codec->toUnicode(“按钮1”)); ** 我的代码: **加粗样式 QPushButton * btn = ...
  • 背景arm开发板移植QT后通过程序读取配置文件中的中文字符并在界面上显示出来。问题分析英文字符可以正常显示中文字符则乱码。解决方法main函数中添加QTextCodec *codec = QTextCodec::codecForName("utf-8");...
  • 完美解决QT+VS2013中文显示乱码

    千次阅读 2018-04-12 11:15:52
    qt4和VS2008的中文支持,大家都知道的。就不说了。qt5.2.1发布后,源码全部是UTF-8编码,但由于微软的问题,VS2010打上补丁VS2010sp1,加入#pragma execution_character_set("utf-8")可以解决中文乱码问题。...
  • 记录 参考: https://blog.csdn.net/rbaggio92/article/details/79684862 //在头文件前面加上下面几行代码 #ifdef WIN32 #pragma execution_character_set(“utf-8”) #endif
  • //在头文件前面加上下面几行代码 #ifdef WIN32 #pragma execution_character_set("utf-8") #endif

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,170
精华内容 2,068
关键字:

qt中文显示乱码