Qt国际化详细介绍,中文乱码以及解决方案
Qt国际化的一般步骤
- 运行 lupdate,从应用程序的代码中提取所有界面上的可见字符。
这些可见字符必须被 tr() 、QCoreApplication::translate()、Qt_TR_NOOP()、Qt_TRANSLATE_NOOP()等来包裹字符串,具体这些函数或者宏是什么功能,我们后面细说。
- 使用 Qt Linguist 翻译应用程序。
- 运行 lrelease,生成二进制的 .qm 文件,应用程序可以使用 QTranslator 加载这个文件。
翻译标志函数和宏
- 在类内时,使用tr() 和 Qt_TR_NOOP()
使用 tr() 包裹可见字符,如下代码所示:
- QPushButton *button = new QPushButton(this);
- button->setText(tr("国际化"));
如果所属的类不是继承于 QObject,我们可以将上面代码改成下面所示:- QPushButton *button = new QPushButton(this);
- button->setText(QObject::tr("国际化"));
或者使用 Q_DECLARE_TR_FUNCTIONS 将 tr() 函数加入到这个类里,代码如下所示:- class MyClass
- {
- Q_DECLARE_TR_FUNCTIONS(MyClass)
- public:
- MyClass();
- ...
- };
如果声明的字符串生命资源串和常量,我们就需要使用 QT_TR_NOOP() 和 tr() 配合使用。 示例代码如下所示:- QString FriendlyConversation::greeting(int type)
- {
- static const char *greeting_strings[] = {
- QT_TR_NOOP("Hello"),
- QT_TR_NOOP("Goodbye")
- };
- return tr(greeting_strings[type]);
- }
- class MyClass
- {
- Q_DECLARE_TR_FUNCTIONS(MyClass)
- static const char * const ids[] = {
- //% "This is the first text."
- QT_TR_NOOP("qtn_1st_text"),
- //% "This is the second text."
- QT_TR_NOOP("qtn_2nd_text"),
- 0
- };
- public:
- MyClass();
- void addLabels();
- ...
- };
- void MyClass::addLabels()
- {
- for (int i = 0; ids[i]; ++i)
- new QLabel(tr(ids[i]), this);
- }
- 在类外时,使用QCoreApplication::translate() 和 Qt_TRANSLATE_NOOP(),相对于 tr() 函数,translate() 函数的优点:
- 使用范围更广,tr() 的使用范围在类内使用,translate() 可以在类内也可以在独立的函数中使用,例如:main() 函数。
- 翻译更精细,因为 translate() 添加了上下文共能,所以他相对于 tr() 可以更精确的进行翻译,例如,translate("MainForm", "draw") 和 translate("SubForm", "draw"); 都是 “draw” 我们可以根据他在不同的窗体上,翻译有所区别。
同样,在 Qt_TRANSLATE_NOOP() 宏中也是相同的用法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2014-08-27 QStyleFactory类参考