如果在带有 Q_OBJECT 宏的 class 之外,则无法在 Qt Linguist 中获取字符串

Not able to get strings in Qt Linguist if outside of a class with the Q_OBJECT macro

我的项目中有一个文件,其中一些函数不是任何 class 的成员。我有一些字符串要在那里翻译,因此,不在 class 从 Qt QObject 派生的任何 class 或类似 class 声明中的 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;
}

终于发现需要写:

... 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 预处理器指令检测第二种形式