QPlainTextEdit、QTextEdit、QColorDialog的汉化
来源:互联网 发布:java解决高并发问题 编辑:程序博客网 时间:2024/06/03 19:26
软件汉化用的是Qt自带的ts文件qt_zh_CN.ts,用lrelease.exe编为qt_zh_CN.qm文件后,拷个地方填上路径加载安装下就可以了,找不到ts和exe的位置可用everything搜一下。
- QApplication a(argc, argv);
- //...
- QTranslator qtTranslator;
- qtTranslator.load("qt_zh_CN.qm", strPath);
- a.installTranslator(&qtTranslator);
- //...
这样大部分的都翻译过来了,还有少数顽固派不服礼教,排查了下,主要是QPlainTextEdit和QTextEdit的右键菜单和QColorDialog上的几处没有汉化。
看帮助文档,ts文件是xml格式的,于是拖到VS Code中一探究竟,如QLineEdit,里面的内容基本这个样子:
- <context>
- <name>QLineEdit</name>
- <message>
- <locationfilename="../src/gui/widgets/qlineedit.cpp"line="+2680"/>
- <source>&Undo</source>
- <translation>撤消(&U)</translation>
- </message>
- <message>
- <locationline="+4"/>
- <source>&Redo</source>
- <translation>恢复(&R)</translation>
- </message>
- </context>
除了location我最终也没弄太明白做什么用的,而且自带的删掉也没发现有什么影响(后来发现貌似是Qt语言家里定位代码用的),其他的含义都很清晰了,于是拷了一份QLineEdit,删掉了location行,把QLineEdit改为QPlainTextEdit,编了下,我是VS环境,临时把ts和qm放一起,把ts加入工程里,右键最后就会出现lrelease的菜单,运行,not work,郁闷,扒了扒了源码,发现QPlainTextEdit的右键菜单实际是在一个叫QWidgetTextControl的控件里实现的,于是改成QWidgetTextControl试了下,结果QPlainTextEdit和QTextEdit都好了,再看代码,原来QTextEdit也是QWidgetTextControl弹得右键,妥。
然后就是QColorDialog,QColorDialog原来ts里有一部分,就是不全,先加入Pick Screen Color的翻译:
- <message>
- <source>Pick Screen Color</source>
- <translation>拾取屏幕颜色(&P)</translation>
- </message>
(&P)是自己加的热键Alt+P,因为&是xml的五个转义字符之一,编辑器里实际要写的是(&P),这边自动给转过来了,这个倒挺顺利。
然后点了下这个键,发现下面还有实时显示坐标和颜色的提示,也是英文,于是从源码里拷出了原文翻译了下:
- <message>
- <source>Cursor at %1, %2, color: %3\nPress ESC to cancel</source>
- <translation>坐标: %1, %2, 颜色: %3\n按ESC键取消</translation>
- </message>
竟然没有用!研究了下ts里其他的写法后,最终发现应该这样写:
- <message>
- <source>Cursor at %1, %2, color: %3
- Press ESC to cancel</source>
- <translation>坐标: %1, %2, 颜色: %3
- 按ESC键取消</translation>
- </message>
然后就是OK和Cancel,如法炮制,然并卵,扒了扒代码,貌似是QDialogButtonBox家的,然而试了一圈,从QDialogButtonBox、QPushButton到QAbstractButton,并没有人愿意认领,走投无路只好祭出了撒手锏:
- if (QDialogButtonBox *btnBox = colorDlg->findChild<QDialogButtonBox *>())
- {
- if(QPushButton *btnOk = btnBox->button(QDialogButtonBox::Ok))
- btnOk->setText("确定");
- if (QPushButton *btnCancel = btnBox->button(QDialogButtonBox::Cancel))
- btnCancel->setText("取消");
- }
呵呵,无处可逃了吧,鉴于整个软件用这个控件的地方不多,就三处,又没有其他好的办法(谁知道望告知),so be it!
确定,取消如果要加Alt热键,注意C已经被界面上的其他元素占用了,不能再给取消用了,这个可以自己协调,这是后话。
我的第一篇博客O(∩_∩)O~,虽然没撒技术含量,考虑到可能会有人跳坑,还是勇敢地分享一下引玉,对了,我用的是Qt5.4.1。
(第一篇博客,还误删了,怎么写第二篇呢,还好有收藏,重发一下吧,最初应该是2016-12-20左右发表的 )
- QPlainTextEdit、QTextEdit、QColorDialog的汉化
- QTextEdit 控件的妙用(以及与QPlainTextEdit的区别)
- QTextEdit和QPlainTextEdit样式表中属性选择器不起作用的问题
- 解决QT中文5.6 QTextEdit QPlainTextEdit的右键菜单翻译不全
- QTextEdit 、QPlainTextEdit设置插入字体颜色
- Qt学习笔记之QTextEdit 、QPlainTextEdit
- QPlainTextEdit
- QColorDialog
- Qt5中部分自带控件菜单(QLineEdit、QTextEdit右键菜单)的汉化
- Qt5中部分自带控件菜单(QLineEdit、QTextEdit右键菜单)的汉化
- QTextEdit/QPlainTextEdit添加文字超出视图后,滚动条自动移至最底部
- QTextEdit的段落排版
- 计算QTextEdit的高度
- QTextEdit 控件的学习
- QTextEdit 的一些总结
- QTextEdit 的 placeholderText 属性
- QTextEdit
- QTextEdit
- 1123 平面中的点 point类Ⅲ
- collection单列集合子类有list和set,还有迭代器iterator
- day70_webservice
- Python:如何获取当前的日期和时间
- JS中mouseover和mouseout多次触发问题如何解决
- QPlainTextEdit、QTextEdit、QColorDialog的汉化
- 【Java】多线程系列(二)之CountDownLatch的使用
- PowerDesigner入门教程(网上书店)
- maven笔记
- 嵌入式Linux c语言开发工具
- Ubuntu: Linux系统下gcc(g++)任意版本切换
- 用C语言模拟实现c++的继承与多态特性
- 整理笔记
- DBUTILS的原理简单实现代码