关于QT tr()函数乱码显示问题

_LinGM 2018-03-09 11:05:55

setWindowTitle(tr("这是窗口!"));出现乱码
由于要做语言翻译,[size=16px]]所以必须要用tr().

找了很久的解决办法:大多都用的
QTextCodec *codec = QTextCodec::codecForName("GB2312");
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);

但是在Qt5.5以后就只有setCodecForLocale一个接口。解决不了啊!!!

请指教,谢谢!
[/size]
...全文
2080 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
雲天之巔 2018-03-23
  • 打赏
  • 举报
回复
你用tr的目的不就是为了翻译么? 既然要翻译 你代码里面都写英文 中文用翻译文件来写不行么? setWindowTitle(tr("this is dialog!")); 然后把中文翻译文件里面翻译这句话不就好了。。。
D_KING_ 2018-03-22
  • 打赏
  • 举报
回复
代码文件保存为utf-8,或在头文件加上# pragma execution_character_set("utf-8")
Little柯南 2018-03-21
  • 打赏
  • 举报
回复
肯定是用的VS编译器,没用使用那句命令。MinGw就不会有你这个问题!
萧洛 2018-03-20
  • 打赏
  • 举报
回复
引用 22 楼 qq_37887537 的回复:
我感觉使用tr也是很麻烦的,翻译很难。使用xml做个中英文文件,在程序中切换调用的列表可以吗?
qt做翻译不麻烦,ts文件本来就是xml格式的。
万能菜道人 2018-03-20
  • 打赏
  • 举报
回复
我感觉使用tr也是很麻烦的,翻译很难。使用xml做个中英文文件,在程序中切换调用的列表可以吗?
Cleverman 2018-03-14
  • 打赏
  • 举报
回复
把源文件保存为UTF-8的格式,并且把在main函数里面用setCodecForLocale把你的全局字符集设为UTF-8。。。,我做QT3和QT5移植的。。。从GBK到UTF-8都能弄过来,有啥疑问可以问我
  • 打赏
  • 举报
回复
引用 16 楼 YIZI_LinRL 的回复:
[quote=引用 15 楼 u010374511 的回复:] 代码上就先这样写: setText(tr(u8"我是中文")); 编译, 如果没有error,说明支持这种写法, u8是c++11的内容, Google搜一下,很简单的. BTW: visualstudio2015的编译器支持这种写法, 13不行, 不知道你用什么编译器
10 没有 [/quote] # pragma execution_character_set("utf-8")
彩阳 2018-03-13
  • 打赏
  • 举报
回复
我感觉用语言家就可以解决很多问题,而且以后国际化非常方便,不要嫌麻烦。
Lawrence_121 2018-03-13
  • 打赏
  • 举报
回复
#pragma execution_character_set("utf-8") 你加这句话试试
_LinGM 2018-03-12
  • 打赏
  • 举报
回复
引用 15 楼 u010374511 的回复:
代码上就先这样写: setText(tr(u8"我是中文")); 编译, 如果没有error,说明支持这种写法, u8是c++11的内容, Google搜一下,很简单的. BTW: visualstudio2015的编译器支持这种写法, 13不行, 不知道你用什么编译器
10 没有
  • 打赏
  • 举报
回复
引用 14 楼 YIZI_LinRL 的回复:
[quote=引用 13 楼 u010374511 的回复:] setText(tr(u8"我是中文"));
u8是什么,我没找到。 是utf8的意思? trUtf8(“中文”)还是乱码。[/quote] 代码上就先这样写: setText(tr(u8"我是中文")); 编译, 如果没有error,说明支持这种写法, u8是c++11的内容, Google搜一下,很简单的. BTW: visualstudio2015的编译器支持这种写法, 13不行, 不知道你用什么编译器
_LinGM 2018-03-12
  • 打赏
  • 举报
回复
引用 13 楼 u010374511 的回复:
setText(tr(u8"我是中文"));
u8是什么,我没找到。 是utf8的意思? trUtf8(“中文”)还是乱码。
  • 打赏
  • 举报
回复
引用 10 楼 YIZI_LinRL 的回复:
[quote=引用 8 楼 u010374511 的回复:] 编译器支持c++11, 可以这样: setText(u8"我是中文");
我必须要用tr实现语言翻译[/quote] setText(tr(u8"我是中文"));
_LinGM 2018-03-12
  • 打赏
  • 举报
回复
引用 11 楼 jxbinwd 的回复:
不用设置什么编码,直接用QStringLiteral宏,比如:QStringLiteral("提示") 只要中文都加上QStringLiteral,显示正常。
必须要用tr()
萧洛 2018-03-12
  • 打赏
  • 举报
回复 2
不用设置什么编码,直接用QStringLiteral宏,比如:QStringLiteral("提示") 只要中文都加上QStringLiteral,显示正常。
_LinGM 2018-03-12
  • 打赏
  • 举报
回复
引用 8 楼 u010374511 的回复:
编译器支持c++11, 可以这样: setText(u8"我是中文");
我必须要用tr实现语言翻译
_LinGM 2018-03-12
  • 打赏
  • 举报
回复
引用 5 楼 hardWorkingBear 的回复:
引用
利用qstringliteral函数就可以用了
qstringliteral这个宏是将str转换格式,返回一个QString。而r(const char * sourceText, const char * disambiguation = 0, int n = -1),接受char*
_LinGM 2018-03-12
  • 打赏
  • 举报
回复
引用 6 楼 MAYBEALL 的回复:

int main()
{
     QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
     QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));
     ......
}
Qt5.5以后就没有这两个方法了
  • 打赏
  • 举报
回复
编译器支持c++11, 可以这样: setText(u8"我是中文"); BTW: QStringLiteral是宏,
萧洛 2018-03-12
  • 打赏
  • 举报
回复
引用 12 楼 YIZI_LinRL 的回复:
[quote=引用 11 楼 jxbinwd 的回复:] 不用设置什么编码,直接用QStringLiteral宏,比如:QStringLiteral("提示") 只要中文都加上QStringLiteral,显示正常。
必须要用tr()[/quote] 如果你是要显示翻译文本,那应该这样用:setWindowTitle(tr("MY_WINDOW_TITLE")); 然后在对应的ts文件中定义“MY_WINDOW_TITLE”符号的中文或英文等语言的翻译文本。
加载更多回复(6)

16,233

社区成员

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

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