惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
M
MIT News - Artificial intelligence
D
Docker
S
SegmentFault 最新的问题
B
Blog
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
博客园 - 【当耐特】
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
腾讯CDC
阮一峰的网络日志
阮一峰的网络日志
U
Unit 42
C
Check Point Blog
GbyAI
GbyAI
美团技术团队
Recent Announcements
Recent Announcements
F
Fortinet All Blogs
量子位
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
Google Developers Blog

博客园 - StationaryTraveller

如何查找微软VS软件中的图标 SQLite 的自增(AUTOINCREMENT)强制要求列的数据类型必须是INTEGER Windows判断某窗口是否被其他窗口完全覆盖 MFC实现一个通用模态进度条窗口 如何批量修改“后期生成事件”为“预生成事件” MFC对话框中如何给一个控件发送消息 Window剪切板 C语言根据函数指针偏移实现函数动态调用 Qt程序系统文本翻译 SVN创建分支 Qt多版本如何共存 Qt6编译的程序在某些win10系统报错 电脑忘机了用户名密码怎么办 Qt事件过滤器实现空闲检测 CMFCToolTipCtrl的AddTool导致内存增加 MFC中CBitmap、CBrush、CFont、CPalette、CPen、CRgn删除GDI对象问题 实现从QListWidgett拖拽项到QTableWidget Windows系统下通过命令行获取进程指标 命令模式实现撤销和重做机制 避免溢出求平均值的算法 字节流转16进制字符串 PImpl:Pointer to Implementation C++单例
Qt动态获取翻译文本
StationaryTraveller · 2026-04-03 · via 博客园 - StationaryTraveller

使用QT_TR_NOOP宏,看例子

QString getText(OperationStateEnum state)
{
    static std::map<OperationStateEnum, const char*> data =
    {
        {OperationStateEnum::UNKNOW, QT_TR_NOOP("未知")},
        {OperationStateEnum::NOSAVE, QT_TR_NOOP("未保存")},
        {OperationStateEnum::SAVED, QT_TR_NOOP("已保存")}
    };

    auto iter = data.find(state);
    if ( iter != data.end())
    {
        return tr(iter->second);
    }

    return "";
}

QT_TR_NOOP,NOOP是 No Operation 的缩写,意为 “无操作”,原型如下

#define QT_TR_NOOP(sourceText) (sourceText)

展开后就是原样返回输入的字符串,运行时不做任何操作(不翻译、不转换、不分配内存)。它存在的唯一目的就是标记:告诉 lupdate 工具(Qt 的翻译提取工具)这个字符串需要被提取到翻译文件(.ts)中。有些字符串需要存储在静态数据结构中(如 static const char* 数组、std::map),为了提高效率等原因,因此不能直接调用 tr()(否则会在程序启动时固定翻译,无法动态切换语言)。QT_TR_NOOP 让你先标记这些字符串,等到真正使用时再调用 tr() 来翻译,从而既支持 lupdate 提取,又支持运行时动态切换语言。

官方说明:

QT_TR_NOOP(sourceText)
Marks the UTF-8 encoded string literal sourceText for delayed translation in the current context (class).
The macro tells lupdate to collect the string, and expands to sourceText itself.
Example:
QString FriendlyConversation::greeting(int type)
{
static const char *greeting_strings[] = {
QT_TR_NOOP("Hello"),
QT_TR_NOOP("Goodbye")
};
return tr(greeting_strings[type]);
}

The macro QT_TR_NOOP_UTF8() is identical and obsolete; this applies to all other _UTF8 macros as well.