在Qt5.14.0下原有Qt5.9.9下工程中文显示乱码问题以及发布问题处理总结
一、情况介绍
在Qt5.9.9下建立的工程,由MSVC2013编译没有任何问题,由于Qt软件某一些功能无法满足,所以将软件升级到Qt5.14.0,但是升级以后,出现了原来没有的问题,编译生产的界面里面中文显示都变成了乱码,请见下图。之后又发现Qt5.14.0在MinGW编译器下的.exe文件无法部署的问题,通过增装MSVC2015编译器解决。
二、解决办法
我出现乱码的代码是这样写的:
measureBtn=new QPushButton(QString::fromLocal8bit("测量"));
查找网上资料,按照https://blog.csdn.net/liubing8609/article/details/106727669,修改如下:
measureBtn=new QPushButton(QString::fromLocal8bit("测量")。toLocal8bit());
编译后,发现有的中文显示正常了,有些仍然是乱码,特别是包含标点符号的单位符号的,此方法仍然不行。
后面将程序修改如下:
measureBtn=new QPushButton(QStringLiteral("测量"));
修改后全部变为正常。
用MinGw编译后的exe程序用MinGw部署,产生“Unable to find the platform plugin”的错误,查找资料,需要解决的话,卸载此软件,重新安装Qt5.14.1或者安装Qt5.13的版本,说白了用MinGw部署,必须重新安装软件,哪能不能用MSVC2015或MSVC2017编译和部署呢,由于我安装了VS2013,原来Qt5.9.9就一直使用MSVC2013编译和部署的,现在MSVC2015编译程序qglobal.h就报错误,查看MSVC2015配置如下:
现在需要安装VS2015的运行时组件和生成工具2015即可,不再重新安装VS2015参考文章:https://www.cnblogs.com/sggggr/p/12791740.html。安装后对MSVC2015的配置如下:
至此,通过MSVC2015将程序编译后,在对.exe文件部署,都能正常实现。
三、小结
QSringLiteral(str)
这个指令在编译的时候生成一个在String单字以外的QString的数据,即Qt5中从字符串常量初始化一个QString对象,在这个类中,创建一个QString在空闲的时候同时生成string数据存在编译对象中的只读区域。使用QStringLiteral来代替C++中的双重数值传递将会在编译的时候显著的提升时间;
qt fromLocal8Bit()函数可以设置编码。
QT默认的编码(unicode)是不能显示中文的,windows默认使用(GBK/GB2312/GB18030),所以需要来更改QT程序的编码来解决中文显示的问题。