• 1936阅读
  • 4回复

QT解决中文乱码 [复制链接]

上一主题 下一主题
离线robinsonsir
 

只看楼主 倒序阅读 楼主  发表于: 2018-07-26
(1)、中文编码一律使用QString::fromLocal8Bit()接口。原因:需要支持QT4版本。QStringLiteral()方法也可取,但是它只支持QT5版本,如果没有版本问题,可以使用。(2)、CPP等文件编码一律使用UTF8—BOM格式。原因1:UTF8-无BOM在使用window编译器cl中编译会失败,当然除非你Windows中使用QT的Mingw版本编译开发。原因2:不使用GBK的文件编码是为了更容易的兼容到linux版本与windows中,否则你需要改QtCreate的编码环境与linux的系统字符环境。 其它知识:QString str( QObject::tr("中文") ) 能用么?
答案:不能,tr( ) 中只能是英文。
因为QT5版本取消了QTextCodec::setCodecForTr()方法。并且你要明白QObject::tr是干嘛的。它是用于程序国际化使用的,也就可以界面文字翻译成不同的语言。你如果使用QObject::tr,你应该全部用英文表示,然后后面借助Linguist翻译成中文,就不会乱码了。详细请搜索“qt国际化"。



全文参考  

离线dbzhang800

只看该作者 1楼 发表于: 2018-09-12
VS2015update 以及更新版本已经不需要BOM了。Windows10中的记事本也开始支持linux换行符了

离线ragtime

只看该作者 2楼 发表于: 01-07
一般msvc下都是用

#if _MSC_VER >= 1600

#pragma execution_character_set("utf-8")

#endif
离线robinsonsir

只看该作者 3楼 发表于: 02-25
回 ragtime 的帖子
ragtime:一般msvc下都是用
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
....... (2019-01-07 09:38) 

      正解!
离线XChinux

只看该作者 4楼 发表于: 02-26
我一般为了mingw/msvc/gcc兼容,都用GBK,然后写个快捷方法,凡是C++代码中用到汉字的地方,都用这个函数转换
QString C(const char *str)
{
        QTextCodec::codecForName("CP936")->toUnicode();
}

lineEdit->setText(C("输入正确的名称"));
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个