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();//光标回到用户名输入

tr()函数是用来多语言翻译的,一般不要用中文;

去掉 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()顶部 加上试试

参考技术B 中文用QString::fromlocal8bit()追问

怎么用 啊,是这样吗: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设计登录窗口,弹窗错误提示汉字输出为乱码的主要内容,如果未能解决你的问题,请参考以下文章

Qt 中文乱码解决方案

QT 控制台输出乱码

qt解析json汉字和数字一起的时候提示数据错误

qt无法正常输出中文怎么办

我写了一个C语言程序。但输出结果为一串乱码。不知道是哪里错误了

python打印输出汉字,有一部分出现乱码怎么解决?