QT界面,汉字显示为问号“?”

沧水1 2016-03-25 05:16:44


两个问题:

1.QT界面,汉字和反括号“)”为何显示为问号呢?请问如何解决?

几种方法都未能解决:
1)添加“ QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));”,未能解决;
2)将UTF-8改成system,未能解决;
3)把UTF-8分别改成GBK/GB2312,未能解决;
4)在默认编码:UTF-8时,在UTF-8 BOM:下添加“如果编码是UTF-8则添加”,未能解决?


2.为何显示不稳定呢?如图,简化版的“)”没问题,标准版的“)”就有问题;速报信息查询的“询”显示没问题,占存车查询的“询”显示有问题。请问这是为何呢?

谢谢!
...全文
2521 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ibm123 2016-03-29
  • 打赏
  • 举报
回复
引用 10 楼 zhk7894613 的回复:
[quote=引用 6 楼 IBM123 的回复:] 如果源码是UTF-8, 直接用QStrinb::fromUtf8("") [quote=引用 3 楼 zhk7894613 的回复:] [quote=引用 1 楼 IBM123 的回复:] 源码是GBK: QTextCodec::codecForName("GBK")->toUnicode("中文"); 源码是UTF8: QTextCodec::codecForName("UTF-8")->toUnicode("中文"); 不要用tr,tr专为国际化用的。
请问“源码是UTF8:”是指文本编译器->行为->文件编码->默认编码下,设置为“UTF-8”就可以吗?我这里是UTF-8的,并在主函数里添加了“QTextCodec::codecForName("UTF-8")->toUnicode("中文");”,也在将tr去掉,变为“QPushButton("行车日志查询(标准版)");”和“QPushButton("占存车查询 ");”,但还是不行啊,还是显示"?",请问如何解决呢?[/quote] 如果源码是UTF8: QPushButton(QString::fromUtf8("占存车查询 ")); 或者 QPushButton(QTextCodec::codecForName("UTF-8")->toUnicode("占存车查询 ")); [/quote] 不行啊,但QString::fromLocal8Bit("占存车查询")或者QStringLiteral("占存车查询");是可以的。[/quote] 我晕,说明你的源代码就是gb2312编码,用下面的万无一失: QPushButton(QTextCodec::codecForName("GBK")->toUnicode("占存车查询 "));
ibm123 2016-03-29
  • 打赏
  • 举报
回复
引用 11 楼 zhk7894613 的回复:
[quote=引用 7 楼 T_Sky_ 的回复:] pushButton(QString::fromLocal8Bit("中文")); 解决一切乱码
是的,这个确实可以,谢谢![/quote] 中文操作系统是可以的,你换个操作系统试,比如,英文操作系统,繁体操作试试。
沧水1 2016-03-29
  • 打赏
  • 举报
回复
引用 7 楼 T_Sky_ 的回复:
pushButton(QString::fromLocal8Bit("中文")); 解决一切乱码
是的,这个确实可以,谢谢!
沧水1 2016-03-29
  • 打赏
  • 举报
回复
引用 6 楼 IBM123 的回复:
如果源码是UTF-8, 直接用QStrinb::fromUtf8("") [quote=引用 3 楼 zhk7894613 的回复:] [quote=引用 1 楼 IBM123 的回复:] 源码是GBK: QTextCodec::codecForName("GBK")->toUnicode("中文"); 源码是UTF8: QTextCodec::codecForName("UTF-8")->toUnicode("中文"); 不要用tr,tr专为国际化用的。
请问“源码是UTF8:”是指文本编译器->行为->文件编码->默认编码下,设置为“UTF-8”就可以吗?我这里是UTF-8的,并在主函数里添加了“QTextCodec::codecForName("UTF-8")->toUnicode("中文");”,也在将tr去掉,变为“QPushButton("行车日志查询(标准版)");”和“QPushButton("占存车查询 ");”,但还是不行啊,还是显示"?",请问如何解决呢?[/quote] 如果源码是UTF8: QPushButton(QString::fromUtf8("占存车查询 ")); 或者 QPushButton(QTextCodec::codecForName("UTF-8")->toUnicode("占存车查询 ")); [/quote] 不行啊,但QString::fromLocal8Bit("占存车查询")或者QStringLiteral("占存车查询");是可以的。
沧水1 2016-03-29
  • 打赏
  • 举报
回复
引用 5 楼 u013466477 的回复:
你用的qt版本是什么??qt4还是qt5 请确保源码是utf8的,你可以把你的代码用记事本打开,然后再保存成utf8格式。 上面一步完成后,还不行就用下面方法。 如果不用国际化,可以用这个宏QStringLiteral("标准版");
1.qt5; 2.遇到一个问题,有个源文件是UTF-8格式的,编译不通过;打开重新保存在UTF-8格式就编译通过了,这是为何? 3.QStringLiteral确实可以解决乱麻问题,但QT5里面无法将其#include呀,不过编译没问题,为何?
沧水1 2016-03-29
  • 打赏
  • 举报
回复
引用 16 楼 u013466477 的回复:
[quote=引用 9 楼 zhk7894613 的回复:] [quote=引用 5 楼 u013466477 的回复:] 你用的qt版本是什么??qt4还是qt5 请确保源码是utf8的,你可以把你的代码用记事本打开,然后再保存成utf8格式。 上面一步完成后,还不行就用下面方法。 如果不用国际化,可以用这个宏QStringLiteral("标准版");
1.qt5; 2.遇到一个问题,有个源文件是UTF-8格式的,编译不通过;打开重新保存在UTF-8格式就编译通过了,这是为何? 3.QStringLiteral确实可以解决乱麻问题,但QT5里面无法将其#include呀,不过编译没问题,为何? [/quote] QString::fromLocal8Bit("中文")确实只有中文系统才行,随便换个韩文什么的就不行了的。 源文件是UTF-8格式的,这有可能只是一部分是UTF-8的,可能存在其他编码的。重新保存就全部转化为UTF-8了 QStringLiteral是个宏,不是一个类,不需要包含头文件。QStringLiteral这个才是为了解决乱码而被加进qt5的。 [/quote]
引用 16 楼 u013466477 的回复:
[quote=引用 9 楼 zhk7894613 的回复:] [quote=引用 5 楼 u013466477 的回复:] 你用的qt版本是什么??qt4还是qt5 请确保源码是utf8的,你可以把你的代码用记事本打开,然后再保存成utf8格式。 上面一步完成后,还不行就用下面方法。 如果不用国际化,可以用这个宏QStringLiteral("标准版");
1.qt5; 2.遇到一个问题,有个源文件是UTF-8格式的,编译不通过;打开重新保存在UTF-8格式就编译通过了,这是为何? 3.QStringLiteral确实可以解决乱麻问题,但QT5里面无法将其#include呀,不过编译没问题,为何? [/quote] QString::fromLocal8Bit("中文")确实只有中文系统才行,随便换个韩文什么的就不行了的。 源文件是UTF-8格式的,这有可能只是一部分是UTF-8的,可能存在其他编码的。重新保存就全部转化为UTF-8了 QStringLiteral是个宏,不是一个类,不需要包含头文件。QStringLiteral这个才是为了解决乱码而被加进qt5的。 [/quote] 好的,谢谢!
冷静忍耐 2016-03-29
  • 打赏
  • 举报
回复
引用 9 楼 zhk7894613 的回复:
[quote=引用 5 楼 u013466477 的回复:] 你用的qt版本是什么??qt4还是qt5 请确保源码是utf8的,你可以把你的代码用记事本打开,然后再保存成utf8格式。 上面一步完成后,还不行就用下面方法。 如果不用国际化,可以用这个宏QStringLiteral("标准版");
1.qt5; 2.遇到一个问题,有个源文件是UTF-8格式的,编译不通过;打开重新保存在UTF-8格式就编译通过了,这是为何? 3.QStringLiteral确实可以解决乱麻问题,但QT5里面无法将其#include呀,不过编译没问题,为何? [/quote] QString::fromLocal8Bit("中文")确实只有中文系统才行,随便换个韩文什么的就不行了的。 源文件是UTF-8格式的,这有可能只是一部分是UTF-8的,可能存在其他编码的。重新保存就全部转化为UTF-8了 QStringLiteral是个宏,不是一个类,不需要包含头文件。QStringLiteral这个才是为了解决乱码而被加进qt5的。
沧水1 2016-03-29
  • 打赏
  • 举报
回复
引用 12 楼 IBM123 的回复:
[quote=引用 11 楼 zhk7894613 的回复:] [quote=引用 7 楼 T_Sky_ 的回复:] pushButton(QString::fromLocal8Bit("中文")); 解决一切乱码
是的,这个确实可以,谢谢![/quote] 中文操作系统是可以的,你换个操作系统试,比如,英文操作系统,繁体操作试试。[/quote] 谢谢,我现在只涉及到中文操作系统,没涉及到英文和其它操作系统。不过这点,我记下了,谢谢!
沧水1 2016-03-29
  • 打赏
  • 举报
回复
引用 13 楼 IBM123 的回复:
[quote=引用 10 楼 zhk7894613 的回复:] [quote=引用 6 楼 IBM123 的回复:] 如果源码是UTF-8, 直接用QStrinb::fromUtf8("") [quote=引用 3 楼 zhk7894613 的回复:] [quote=引用 1 楼 IBM123 的回复:] 源码是GBK: QTextCodec::codecForName("GBK")->toUnicode("中文"); 源码是UTF8: QTextCodec::codecForName("UTF-8")->toUnicode("中文"); 不要用tr,tr专为国际化用的。
请问“源码是UTF8:”是指文本编译器->行为->文件编码->默认编码下,设置为“UTF-8”就可以吗?我这里是UTF-8的,并在主函数里添加了“QTextCodec::codecForName("UTF-8")->toUnicode("中文");”,也在将tr去掉,变为“QPushButton("行车日志查询(标准版)");”和“QPushButton("占存车查询 ");”,但还是不行啊,还是显示"?",请问如何解决呢?[/quote] 如果源码是UTF8: QPushButton(QString::fromUtf8("占存车查询 ")); 或者 QPushButton(QTextCodec::codecForName("UTF-8")->toUnicode("占存车查询 ")); [/quote] 不行啊,但QString::fromLocal8Bit("占存车查询")或者QStringLiteral("占存车查询");是可以的。[/quote] 我晕,说明你的源代码就是gb2312编码,用下面的万无一失: QPushButton(QTextCodec::codecForName("GBK")->toUnicode("占存车查询 "));[/quote] 首先,QT5里面不识别codecForName,报错。即使可以,也太长了,用QString::fromLocal8Bit("占存车查询")或者QStringLiteral("占存车查询")多好,方便简洁。
ibm123 2016-03-28
  • 打赏
  • 举报
回复
如果源码是UTF-8, 直接用QStrinb::fromUtf8("")
引用 3 楼 zhk7894613 的回复:
[quote=引用 1 楼 IBM123 的回复:] 源码是GBK: QTextCodec::codecForName("GBK")->toUnicode("中文"); 源码是UTF8: QTextCodec::codecForName("UTF-8")->toUnicode("中文"); 不要用tr,tr专为国际化用的。
请问“源码是UTF8:”是指文本编译器->行为->文件编码->默认编码下,设置为“UTF-8”就可以吗?我这里是UTF-8的,并在主函数里添加了“QTextCodec::codecForName("UTF-8")->toUnicode("中文");”,也在将tr去掉,变为“QPushButton("行车日志查询(标准版)");”和“QPushButton("占存车查询 ");”,但还是不行啊,还是显示"?",请问如何解决呢?[/quote] 如果源码是UTF8: QPushButton(QString::fromUtf8("占存车查询 ")); 或者 QPushButton(QTextCodec::codecForName("UTF-8")->toUnicode("占存车查询 "));
冷静忍耐 2016-03-28
  • 打赏
  • 举报
回复
你用的qt版本是什么??qt4还是qt5 请确保源码是utf8的,你可以把你的代码用记事本打开,然后再保存成utf8格式。 上面一步完成后,还不行就用下面方法。 如果不用国际化,可以用这个宏QStringLiteral("标准版");
feilinhe 2016-03-28
  • 打赏
  • 举报
回复
没什么特别需求的话不要用tr()函数,qt5以后版本建议使用QString:::fromXXX()之类的函数,或者QStringLiteral("XXX");
T_Sky_ 2016-03-28
  • 打赏
  • 举报
回复
pushButton(QString::fromLocal8Bit("中文")); 解决一切乱码
沧水1 2016-03-27
  • 打赏
  • 举报
回复
引用 2 楼 zbw1185 的回复:
还是编码设置的问题.
请问该如何设置呢?
沧水1 2016-03-27
  • 打赏
  • 举报
回复
引用 1 楼 IBM123 的回复:
源码是GBK: QTextCodec::codecForName("GBK")->toUnicode("中文"); 源码是UTF8: QTextCodec::codecForName("UTF-8")->toUnicode("中文"); 不要用tr,tr专为国际化用的。
请问“源码是UTF8:”是指文本编译器->行为->文件编码->默认编码下,设置为“UTF-8”就可以吗?我这里是UTF-8的,并在主函数里添加了“QTextCodec::codecForName("UTF-8")->toUnicode("中文");”,也在将tr去掉,变为“QPushButton("行车日志查询(标准版)");”和“QPushButton("占存车查询 ");”,但还是不行啊,还是显示"?",请问如何解决呢?
画茧自缚 2016-03-25
  • 打赏
  • 举报
回复
还是编码设置的问题.
ibm123 2016-03-25
  • 打赏
  • 举报
回复 1
源码是GBK: QTextCodec::codecForName("GBK")->toUnicode("中文"); 源码是UTF8: QTextCodec::codecForName("UTF-8")->toUnicode("中文"); 不要用tr,tr专为国际化用的。

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧