如果在具有 Q_OBJECT 宏的类之外,则无法在 Qt Linguist 中获取字符串
Posted
技术标签:
【中文标题】如果在具有 Q_OBJECT 宏的类之外,则无法在 Qt Linguist 中获取字符串【英文标题】:Not able to get strings in Qt Linguist if outside of a class with the Q_OBJECT macro 【发布时间】:2021-09-22 12:02:30 【问题描述】:我的项目中有一个文件,其中一些函数不是任何类的成员。我有一些要翻译的字符串,因此,不在从 Qt QObject 派生的任何类中或与类声明中的 Q_OBJECT 宏类似的任何类中,我使用了以下语法:
#define CONTEXT_STRING "Context string here"
...
... QCoreApplication::translate(CONTEXT_STRING, "String to be translated") ...
而不是通常的:
... tr("String to be translated") ...
我正在使用基于 Qt 5.2.1(MSVC 2010,32 位)的 Qt Creator 3.0.1。
我已经运行了 lupdate,但字符串仍然没有出现在 Qt Linguist 中。
一个完整的最小可重现示例是:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QString>
#include <QMessageBox>
#define CONTEXT_STRING "Context string here"
void standalonefun()
QString msg;
msg = QCoreApplication::translate(CONTEXT_STRING, "String to be translated");
QMessageBox::information(0, "Message", msg);
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
ui->setupUi(this);
standalonefun();
MainWindow::~MainWindow()
delete ui;
【问题讨论】:
【参考方案1】:终于发现需要写了:
... QCoreApplication::translate("Context string here", "String to be translated") ...
不能做:
#define CONTEXT_STRING "Context string here"
...
... QCoreApplication::translate(CONTEXT_STRING, "String to be translated") ...
因为 lupdate 没有检测到带有 #define
预处理器指令的第二种形式。
【讨论】:
以上是关于如果在具有 Q_OBJECT 宏的类之外,则无法在 Qt Linguist 中获取字符串的主要内容,如果未能解决你的问题,请参考以下文章