You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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”改成中文“这是什么?”或者其他自定义文字,就得自己重载控件的右键菜单事件了:

  1. 先在你的自定义控件类(比如继承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());
    }
    
  2. 这样右键点击控件时,弹出的菜单里就会显示你自定义的文字,点击后依然会触发之前设置的提示内容,完美兼容原有逻辑。

另外提一句,要是你的项目做了多语言国际化,也可以直接在QT的翻译文件(.ts)里添加"What's This"对应的翻译条目,这样所有默认右键菜单里的这个文本都会自动替换成翻译后的内容,不用每个控件都改。

备注:内容来源于stack exchange,提问作者WWebber

火山引擎 最新活动