多语言展示
当前在线:1695今日阅读:145今日分享:43

Qt右键菜单是英文怎么办

许多新学Qt编程的朋友一定曾碰到过这样的情况,就是程序运行时界面的各项字符串都是中文,右键菜单却偏偏全是英文,真叫人哭笑不得。哎哟哟,这正应了老鸟程序员的那句调侃话语:“编程这碗饭,看起来山珍海味,吃在嘴里却全是砂呀。年轻力壮的码农们,这又该如何是好呢?”
工具/原料

Qt

一、问题描述

在进行Qt编程时,要想使界面上的文字显示为中文,比较常用的方法有两种:1)在界面设计器中全部使用中文2)在初始代码中使用英文,随后使用工具进行翻译,最后再载入翻译文件,从而使得界面呈现为中文不过,尽管我们为了让Qt界面显示中文煞费苦心,但程序运行时弹出的右键菜单却仍然为英文。

二、解决办法
1

要想使右键菜单上的字符显示为中文,我们需要重新实现相应控件的contextMenuEvent函数。该函数继承于父类的虚函数,访问权限为protected。在这个示例中,由于我们需要在编辑框内(QTextEdit类)弹出右键菜单,因此就需要重新实现QTextEdit的contextMenuEvent函数。

2

为了做到这一点,我们需要往工程中添加一个新类,该类继承于QTextEdit,然后再在这个新类中实现contextMenuEvent函数。添加新类的方法是在工程名上右击鼠标,然后选择“添加新文件”。接着,在弹出的对话框中选择C++类。不过,这儿有一个问题。由于在添加新类时,并不能直接选择继承于QTextEdit,因此在这里我们就先选择继承于QWidget,添加好以后再在代码中进行修改。

3

新类添加好以后,打开新类的头文件,再将QWidget改为QTextEdit。注意,包含的头文件也需要修改。

4

然后,在新类的头文件中添加protected类型的contextMenuEvent函数。注意,由于是继承于父类的虚函数,Qt会自动将其函数名显示斜体,以示区别普通函数。

5

随后,我们在新类的源文件中实现该函数。简单起见,我在此就只创建了一个菜单项作为示例。在这儿提醒大家注意,别忘了包含相应的头文件。

6

现在,就只剩下最后一步了。我们在主程序中定义一个新类类型的变量,然后像往常一样使用即可。

7

重新编译程序,看看,是不是菜单已经变成中文了?

三、注意

在contextMenuEvent函数的代码中直接使用中文的方法并不妥当,以上示例我只是为了简单起见。建议:在代码中仍然使用英文,并用tr函数将待翻译的字符串括起来,然后再使用Qt自带的Linguist工具将其译成中文,最后载入翻译文件。若想知道Qt怎样使用翻译文件,可以参考我的Qt编程经验系列《Qt怎样翻译程序中的字符串:提取和翻译》和《Qt怎样翻译程序中的字符串:生成和加载》。

注意事项

要在哪个组件上弹出中文菜单,就重新实现该组件的contextMenuEvent函数。

推荐信息