我具有其中转换器被以通常的方式成功安装的应用程序:TR()函数不工作了迁移从Qt的4至Qt的5
bool bSuccess = qApp->installTranslator(m_translator);
凡m_translator
是一个指针,指向从QTranslator
派生的类。
当应用程序使用Qt 4.7.4编译下面所有的说明做工精细:
QString qTranslString = m_translator->translate("", "string_to_be_translated");
QString qTranslString = QCoreApplication::translate("", "string_to_be_translated");
QString qTranslString = tr("string_to_be_translated");
但当相同的应用,同一个项目设置,编译为Qt 5.2.1,在Windows或Linux上只能编号1正在工作。 另外两个是不是要求的m_translator
的翻译方法。
这里是用于再现该问题的最小例如:
minimalpbm.pro:
greaterThan(QT_MAJOR_VERSION, 4) {
QT += widgets
}
TARGET = minimalpbm
TEMPLATE = app
SOURCES += main.cpp
HEADERS += mytranslator.h
mytranslator.h:
#include <QTranslator>
class MyTranslator : public QTranslator
{
Q_OBJECT
public:
explicit MyTranslator(QObject *parent = 0);
~MyTranslator();
bool isEmpty() const;
QString translate(const char *context, const char *sourceText, const char *comment = 0) const;
private:
};
的main.cpp:
#include <QApplication>
#include <QMainWindow>
#include "mytranslator.h"
MyTranslator::MyTranslator(QObject *parent) : QTranslator(parent)
{
}
MyTranslator::~MyTranslator()
{
}
bool MyTranslator::isEmpty() const
{
return false;
}
QString MyTranslator::translate(const char* /*context*/, const char* sourceText, const char* /*comment*/) const
{
QString translation;
(void) sourceText;
translation = "Window Title"; // No matter what the source text is we return the same translation for test
return translation;
}
int main(int argc, char *argv[])
{
QApplication qA(argc, argv);
QMainWindow qW; // Create main window
MyTranslator *m_translator = new MyTranslator(&qW); // Install translator
qApp->installTranslator(m_translator);
qW.setWindowTitle(qW.tr("ST_TITLE")); // Set title
qW.show(); // Show main window
return qA.exec(); // Main event loop
}
随着Qt4的窗口标题是“窗口标题”, 与Qt5窗口标题是“ST_TITLE”。
任何提示? 非常感谢您提前!
你得到任何编译错误?你怎么知道这个方法没有被调用? –
没有编译错误。我知道,因为调试器在我的自定义'translate'('m_translator-> translate')函数中没有中断。 – mbjoe
好,如果你能为我们提供一个最小的例子来重现你的问题。否则,我们只能猜测。例如。你真的调用'app.installTranslator(m_translator)'? m_translator对象的范围是什么? – E4z9