QT设计登录窗口,弹窗错误提示汉字输出为乱码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT设计登录窗口,弹窗错误提示汉字输出为乱码相关的知识,希望对你有一定的参考价值。
点击登陆,错误提示显示乱码,下面是代码:
void logDialog::on_LoginBtn_clicked() QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); if(ui->usrLineEdit->text().trimmed() == tr("txn") && ui->pwdLineEdit->text() == tr("139931")) accept(); else QMessageBox::warning(this, tr("警告"),tr("用户名或密码输入错误"),tr("确定"));//QMessageBox::Yes ui->usrLineEdit->clear();//删除用户名 ui->pwdLineEdit->clear();//删除秘密 ui->usrLineEdit->setFocus();//光标回到用户名输入
去掉 QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
有中文的地方用
QString::fromlocal8bit("警告");
"警告"在你的代码文件中用的是本地编码,所以可以用QString::fromlocal8bit()函数正确转换;
若你设置了本地编码为ut-8,就对不上了 参考技术A QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
卸载main()函数中,就可以了追问
Qt5.2没有setCodecForTr()和setCodecForCStrings()这两个函数
追答#if defined(_MSC_VER) && (_MSC_VER >= 1600)
# pragma execution_character_set("utf-8")
#endif
在main()顶部 加上试试
怎么用 啊,是这样吗:QMessageBox::warning(this, QString::fromLocal8bit("警告"),tr("Username or password "),tr("yes")),没用啊,还是乱码!!
Qt 中文乱码解决方案
一、问题是什么?
在学习Qt编程的过程中,大多数人都遇到过中文乱码的问题。总结起来有三类:
1. Qt Creator中显示的汉字变为乱码,编辑器上方有“Could not decode "..." with "UTF-8"-encoding. Editing not possible.”的错误提示。此时,出现乱码的文档是不可编辑的。
2. Qt Creator中显示的汉字正常,但编译的时候会出现“常量中有换行符”等一系列错误报警。其实,这也是文字编码的问题。
3. 编译时未报错,但生成的程序中文乱码。
原因. Qt Creator的编辑器默认使用UTF-8(代码页65001)编码来读取文本文件。而Visual Studio保存文件时默认采用的是本地编码,对于简体中文的Windows操作系统,这个编码就是GB2312(代码页936)。如果使用Qt Creator读取由Visual Studio创建的文件,那么编辑器就会以UTF-8编码格式读取GB2312编码格式的文件,出现中文乱码,因为这两套编码系统对汉字编码是不同的。至于英文部分不会乱码,是因为UTF-8和GB2312在单字节字符部分是兼容的。
解决办法:
首先,要把项目中所有的头文件和源文件全都转换成UTF-8+BOM编码保存,全选文本,然后右键选择Add UTF-8 BOM on save。
1. 第1个问题不存在了。
2. 第2个问题也不存在了。
3. 第3个问题,你也可以用上个方案中的方法来解决,但有更好的方法。那就是要用到中文字符的头文件和源文件开头加上MSVC的一个宏:
1 #if _MSC_VER >= 1600
2 #pragma execution_character_set("utf-8")
3 #endif
以上是关于QT设计登录窗口,弹窗错误提示汉字输出为乱码的主要内容,如果未能解决你的问题,请参考以下文章