You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QKeySequence::toString()无法返回翻译后的快捷键文本该如何解决?

问题原因
  1. QKeySequence::toString() 方法默认使用 QKeySequence::PortableText 格式输出,该格式为平台无关的标准化写法,不会触发本地化翻译逻辑,仅输出通用的快捷键表述(如Ctrl+Enter)。只有显式传入 QKeySequence::NativeText 参数时,才会调用QShortcut上下文的翻译逻辑,输出本地化后的快捷键表述。菜单栏的动作快捷键可以正常显示翻译结果,是因为QMenu内部渲染时默认使用了NativeText格式。
  2. 翻译器加载时机错误,QTranslator 的加载、安装操作需要在QApplication实例化完成之后执行,否则Qt的翻译上下文未完成初始化,会导致翻译失效。
修正后的代码
#include <QAction>
#include <QApplication>
#include <QDebug>
#include <QMainWindow>
#include <QMenuBar>
#include <QTranslator>

int main(int argc, char *argv[])
{
    // 首先实例化QApplication,初始化基础运行环境
    QApplication a(argc, argv);
    // 实例化后再加载、安装翻译文件
    QTranslator spanish;
    qDebug() << spanish.load("qtbase_es.qm"); // 加载成功时会返回true
    QApplication::installTranslator(&spanish);
    
    QMainWindow w;
    auto menu = new QMenu("Menu");
    auto action = menu->addAction("Action");
    action->setShortcutContext(Qt::ApplicationShortcut);
    action->setShortcut(Qt::CTRL | Qt::Key_Enter);
    w.menuBar()->addMenu(menu);
    w.show();
    
    // 调用toString时显式传入QKeySequence::NativeText触发翻译
    w.setToolTip(QString("%1 (%2)").arg(action->text(), action->shortcut().toString(QKeySequence::NativeText)));
    qDebug() << action->shortcut().toString(QKeySequence::NativeText); 
    return a.exec();
}
验证

修改后工具提示和调试输出都会返回预期的西班牙语翻译结果Control+Intro,与菜单栏显示内容一致。

内容的提问来源于stack exchange,提问作者HiFile.app - best file manager

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 08:54:02