Reputation: 926
I have an application where the translator is installed successfully in the usual way:
bool bSuccess = qApp->installTranslator(m_translator);
Where m_translator
is a pointer to a class derived from QTranslator
.
When the application is compiled with Qt 4.7.4 all the following instructions work fine:
QString qTranslString = m_translator->translate("", "string_to_be_translated");
QString qTranslString = QCoreApplication::translate("", "string_to_be_translated");
QString qTranslString = tr("string_to_be_translated");
But when the same application, same project settings, is compiled with Qt 5.2.1, on Windows or Linux, only number 1 is working. The other two are not calling the translate method of m_translator
.
Here is a minimal example for reproducing the problem:
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
}
With Qt4 the window title is "Window Title", with Qt5 the window title is "ST_TITLE".
Any hints? Thank you very much in advance!
Upvotes: 1
Views: 835
Reputation: 395
Does MyTranslator::translate
still override a QTranslator
virtual method? When reading QT 5.2.0 documentation, the method you want to override was removed. I would suggest to try to override the translate method with 4 parameters instead of 3, so translate(const char *context, const char *sourceText, const char *disambiguation = Q_NULLPTR, int n = -1) const
. Also put the override
keyword behind it, so that the compiler will warn you for such issues.
Upvotes: 1