QT对话框控件右键弹出菜单“What's This”文本的翻译与自定义覆盖方法咨询
QT对话框控件右键弹出菜单“What's This”文本的翻译与自定义覆盖方法咨询
嘿,这个问题我熟!刚好之前折腾过类似的需求,分两种场景给你讲清楚怎么操作:
一、修改点击“What's This”后弹出的提示内容
这是最常用的需求,QT本身就提供了直接的方法,不用复杂操作:
- 针对单个控件,直接调用
setWhatsThis()方法就行,比如给一个按钮设置自定义提示:QPushButton *testBtn = new QPushButton("测试按钮", this); testBtn->setWhatsThis("这是个测试按钮,点它会触发后台的测试逻辑哦~"); - 如果要批量给多个控件或者整个对话框设置,要么遍历子控件逐个调用,要么用QT的国际化翻译机制(
.ts文件)统一替换提示文本,适合多语言场景。
二、修改右键菜单里的“What's This”菜单项文字
要是你想把菜单里的“What's This”改成中文“这是什么?”或者其他自定义文字,就得自己重载控件的右键菜单事件了:
- 先在你的自定义控件类(比如继承QPushButton的MyBtn,或者对话框类)里重写
contextMenuEvent方法:void MyBtn::contextMenuEvent(QContextMenuEvent *event) { QMenu customMenu(this); // 添加自定义文字的"What's This"菜单项,绑定原有的提示触发逻辑 QAction *whatsThisAction = customMenu.addAction("这是什么?", this, &QWidget::showWhatsThis); // 要是需要保留其他默认菜单项(比如复制、粘贴),直接加进去就行 // customMenu.addAction(tr("复制"), this, &QLineEdit::copy); // 弹出菜单 customMenu.exec(event->globalPos()); } - 这样右键点击控件时,弹出的菜单里就会显示你自定义的文字,点击后依然会触发之前设置的提示内容,完美兼容原有逻辑。
另外提一句,要是你的项目做了多语言国际化,也可以直接在QT的翻译文件(.ts)里添加"What's This"对应的翻译条目,这样所有默认右键菜单里的这个文本都会自动替换成翻译后的内容,不用每个控件都改。
备注:内容来源于stack exchange,提问作者WWebber




