请教QT5.4 +VS2013linux qt 中文乱码码的问题

本人原创,转载请注明,谢谢!
业余时间开始使用QT,发现用VC开发存在中文乱码问题,网上查阅了一圈后,发现解决方式都不怎么完美,要设定QTextCodec::setCodecForxxx,输出中文还要调用QString::fromLocal8Bit(“”)等等。这样的方式我是不愿意接受的,折腾了1小时后完美解决,方案和步骤如下:
1、修改新建C++和Header文件对应模版文件的默认编码 为 utf-8 with signature
VC2012 文件路径:X:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcprojectitems\newc++file.cppX:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcprojectitems\hfile.h
其他版本的vc未测试,理论上应该都是差不多位置。
2、VC新建QT项目,需要修改项目字符集
位置:VS菜单-&Project-&Properties-&Configuration Properties-&General-&Character Set&设为:Use Unicode Character Set
3、修改当前QT项目中用到中文输出的cpp文件单独保存一次编码
步骤1:打开要修改编码的cpp文件步骤2:vs菜单-&File-&Advanced Save Options ,Encoding 设为 Unicode(UTF-8 without signature)-Codepage 65001(所有QT项目中用到中文输出的文件都需要执行一次本操作)
4、让vs在某些情况下默认将文档保存为UTF-8【这一步并非必须】
vs菜单-&Tool-&Options-&Enviroment-&Documents选中 【Save documents as Unicode when data cannot be saved in codepage】
5、调用QString的方式
如:QMessageBox mess(QMessageBox::Question, QStringLiteral(&删除提示&, &确认删除所选组件???&), NULL); &注意这个宏 QStringLiteral(),需要#include &QTextCodec&
至此,用QT+VC开发再无中文编码问题(但不能算十全十美,因为使用单字节字符串还是有问题,不然就只能升级到vs2013了)。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:3325次
排名:千里之外
原创:18篇
(3)(13)(5)请教QT5.4 +VS2013 中文乱码的问题_百度知道
请教QT5.4 +VS2013 中文乱码的问题
提问者采纳
是用的MSVC编译器么?如果是的话。。。这个问题似乎无解。。。【我现在也碰到了这个问题,前段时间去网上查了资料,似乎是无解的】供矗垛匪艹睹讹色番姬在Qt 4时代的话有解决办法。自从Qt 5封了2个与设定文字编码相关的函数之后(Qt 4就是用那两个函数解决掉的),用MSVC编译器的话死活就用不了中文了,用MinGW GCC编译器的话不会受影响。
来自团队:
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁帐号:密码:下次自动登录{url:/nForum/slist.json?uid=guest&root=list-section}{url:/nForum/nlist.json?uid=guest&root=list-section}
贴数:6&分页:没有昵称发信人: hotblaster (没有昵称), 信区: KDE_Qt
标&&题: 编译 Qt 5.6 遇到代码页和文件 Encoding 格式冲突
发信站: 水木社区 (Tue Apr&&5 02:21:35 2016), 站内 && 现在使用的是 中文版 windows 10 + VS2013,并且在官网下载的源代码。
configure -mp -opensource -prefix %cd%\qtbase -developer-build -opengl desktop && 出现了下面的问题,不知道怎么解决了,多谢: &&&&&&&&&& D:\Qt56\qtbase\bin\moc.exe -DUNICODE -DWIN32 -DWIN64 -DQT_DISABLE_DEPRECATED_BEFORE=0 -DQT_TESTLIB_LIB -DQT_CORE_LIB -DQT_TESTCASE_BUILDDIR="\"D:/Qt56/qtbase/tests/auto/corelib/tools/qlocale/test\"" -D_MSC_VER=1800 -D_WIN32 -D_WIN64 -ID:/Qt56/qtbase/mkspecs/win32-msvc2013 -ID:/Qt56/qtbase/tests/auto/corelib/tools/qlocale/test -ID:/Qt56/qtbase/include -ID:/Qt56/qtbase/include/QtTest -ID:/Qt56/qtbase/include/QtCore/5.6.0 -ID:/Qt56/qtbase/include/QtCore/5.6.0/QtCore -ID:/Qt56/qtbase/include/QtCore ..\tst_qlocale.cpp -o .moc\debug\tst_qlocale.moc &&&&&&&& cl -c -nologo -Zc:wchar_t -FS -Zi -MDd -EHsc -MP -GR -W3 -w34100 -w34189 -w44996 /Fd..\debug\tst_qlocale.pdb -DUNICODE -DWIN32 -DWIN64 -DQT_DISABLE_DEPRECATED_BEFORE=0 -DQT_TESTLIB_LIB -DQT_CORE_LIB -DQT_TESTCASE_BUILDDIR="\"D:/Qt56/qtbase/tests/auto/corelib/tools/qlocale/test\"" -I. -I..\..\..\..\..\..\include -I..\..\..\..\..\..\include\QtTest -I..\..\..\..\..\..\include\QtCore\5.6.0 -I..\..\..\..\..\..\include\QtCore\5.6.0\QtCore -I..\..\..\..\..\..\include\QtCore -I.moc\debug -I..\..\..\..\..\..\mkspecs\win32-msvc2013 -Fo.obj\debug\ @C:\Users\Hong\AppData\Local\Temp\nm8CAF.tmp
tst_qlocale.cpp
..\tst_qlocale.cpp(1237) : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
..\tst_qlocale.cpp(1869) : error C2001: 常量中有换行符
..\tst_qlocale.cpp(1872) : error C2001: 常量中有换行符
..\tst_qlocale.cpp(1869) : fatal error C1057: 宏扩展中遇到意外的文件结束
NMAKE : fatal error U1077: “"D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\amd64\cl.EXE"”: 返回代码“0x2”
NMAKE : fatal error U1077: “"D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\amd64\nmake.exe"”: 返回代码“0x2”
NMAKE : fatal error U1077: “cd”: 返回代码“0x2”
NMAKE : fatal error U1077: “cd”: 返回代码“0x2”
NMAKE : fatal error U1077: “cd”: 返回代码“0x2”
NMAKE : fatal error U1077: “cd”: 返回代码“0x2”
NMAKE : fatal error U1077: “cd”: 返回代码“0x2”
NMAKE : fatal error U1077: “cd”: 返回代码“0x2”
NMAKE : fatal error U1077: “cd”: 返回代码“0x2”
-- && ※ 来源:·水木社区 ·[FROM: 81.226.141.*]
没有昵称发信人: hotblaster (没有昵称), 信区: KDE_Qt
标&&题: Re: 编译 Qt 5.6 遇到代码页和文件 Encoding 格式冲突
发信站: 水木社区 (Tue Apr&&5 02:35:01 2016), 站内 && 是不是我应该屏蔽 test 就好了呢?多谢!
【 在 hotblaster (没有昵称) 的大作中提到: 】
: 现在使用的是 中文版 windows 10 + VS2013,并且在官网下载的源代码。
: configure -mp -opensource -prefix %cd%\qtbase -developer-build -opengl desktop
: 出现了下面的问题,不知道怎么解决了,多谢:
: ...................
&& -- && ※ 来源:·水木社区 newsmth.net·[FROM: 81.226.141.*]
享受生活发信人: cavendish (享受生活), 信区: KDE_Qt
标&&题: Re: 编译 Qt 5.6 遇到代码页和文件 Encoding 格式冲突
发信站: 水木社区 (Tue Apr&&5 15:00:54 2016), 站内 && 把代码页换成英文?
configure的时候可以加入-nomake tests -nomake examples
这样就不编译测试代码和实例了 && -- && ※ 来源:·水木社区 ·[FROM: 91.237.34.*]
没有昵称发信人: hotblaster (没有昵称), 信区: KDE_Qt
标&&题: Re: 编译 Qt 5.6 遇到代码页和文件 Encoding 格式冲突
发信站: 水木社区 (Tue Apr&&5 15:23:25 2016), 站内 && 我试过将代码页换成 437(US) 或者 65001(UTF-8)还是不行
看来只能屏蔽 tests 了。 && 多谢!
【 在 cavendish 的大作中提到: 】
: 把代码页换成英文?
: configure的时候可以加入-nomake tests -nomake examples
: 这样就不编译测试代码和实例了
&& -- && ※ 来源:·水木社区 ·[FROM: 164.4.17.*]
没有昵称发信人: hotblaster (没有昵称), 信区: KDE_Qt
标&&题: Re: 编译 Qt 5.6 遇到代码页和文件 Encoding 格式冲突
发信站: 水木社区 (Wed Apr&&6 22:00:07 2016), 站内 && 编译的过程中发现好多文件都需要重新保存一下,从 UTF-8 保存到 UCS-2 Little Endian 。感觉很奇怪。
但是即便是这样还是出错了,这下不知道该怎么办了。多谢! && d:\qt\x64\qt56\vs2013\qtwebengine\src\3rdparty\chromium\base\tuple.h(164) : error C3528: “Ns”: 此包扩展中的元素数与“Ts”中的元素数不匹配 &&&&&&&& d:\qt\x64\qt56\vs2013\qtwebengine\src\3rdparty\chromium\base\tuple.h(153): 参见对正在编译的类 模板 实例化“base::TupleBaseImpl&base::IndexSequence&0x00&,T,std::basic_string&char,std::char_traits&char&,std::allocator&char&&&”的引用 &&&&&&&& with &&&&&&&& [ &&&&&&&&&&&& T=base::internal::UnretainedWrapper&DesktopStreamsRegistry& &&&&&&&& ] &&&&&&&& d:\qt\x64\qt56\vs2013\qtwebengine\src\3rdparty\chromium\base\bind_internal.h(409): 参见对正在编译的类 模板 实例化“base::Tuple&T,std::basic_string&char,std::char_traits&char&,std::allocator&char&&&”的引用 &&&&&&&& with &&&&&&&& [ &&&&&&&&&&&& T=base::internal::UnretainedWrapper&DesktopStreamsRegistry& &&&&&&&& ] &&&&&&&& d:\qt\x64\qt56\vs2013\qtwebengine\src\3rdparty\chromium\chrome\browser\media\desktop_streams_registry.cc(53): 参见对正在编译的类 模板 实例化“base::internal::BindState&base::internal::RunnableAdapter&T&,void (DesktopStreamsRegistry *,const std::string &),base::internal::TypeList&base::internal::UnretainedWrapper&DesktopStreamsRegistry&,std::basic_string&char,std::char_traits&char&,std::allocator&char&&&&”的引用 &&&&&&&& with &&&&&&&& [ &&&&&&&&&&&& T=void (__cdecl DesktopStreamsRegistry::* )(const std::string &) &&&&&&&& ]
ninja: build stopped: subcommand failed. &&&& 【 在 cavendish 的大作中提到: 】
: 把代码页换成英文?
: configure的时候可以加入-nomake tests -nomake examples
: 这样就不编译测试代码和实例了
&& -- && ※ 来源:·水木社区 ·[FROM: 81.226.141.*]
没有昵称发信人: hotblaster (没有昵称), 信区: KDE_Qt
标&&题: Re: 编译 Qt 5.6 遇到代码页和文件 Encoding 格式冲突
发信站: 水木社区 (Sun Apr 10 00:30:53 2016), 站内 && 找到原因了,需要升级一下 VS2013 到 Update 5 就解决了。
这几天没有上来说。
【 在 hotblaster (没有昵称) 的大作中提到: 】
: 编译的过程中发现好多文件都需要重新保存一下,从 UTF-8 保存到 UCS-2 Little Endian 。感觉很奇怪。
: 但是即便是这样还是出错了,这下不知道该怎么办了。多谢!
: d:\qt\x64\qt56\vs2013\qtwebengine\src\3rdparty\chromium\base\tuple.h(164) : error C3528: “Ns”: 此包扩展中的元素数与“Ts”中的元素数不匹配
: ...................
&& -- && ※ 来源:·水木社区 newsmth.net·[FROM: 81.226.141.*]
文章数:6&分页:
抽奖到手软!将狂欢进行到底!

我要回帖

更多关于 qt显示中文乱码 的文章

 

随机推荐