QTranslator не работает при использовании в операторе if
Я добавил файл перевода, используя Qt Linguist. Затем я приступил к использованию QTranslator
когда мое приложение загружено:
QTranslator translator;
bool loaded = translator.load(":/notizie_en_UK.qm");
bool installed = app.installTranslator(&translator);
qDebug() << "Adding translation" << loaded << installed;
Это отлично работает. Теперь я хотел использовать перевод, только если системный язык уже не был языком по умолчанию, поэтому я сделал следующее:
QLocale::Language phoneLang = QLocale::system().language();
qDebug() << "LANGUAGE" << phoneLang << (phoneLang != QLocale::Italian);
if(phoneLang != QLocale::Italian){
QTranslator translator;
bool loaded = translator.load(":/notizie_en_UK.qm");
bool installed = app.installTranslator(&translator);
qDebug() << "Adding translation" << loaded << installed;
}
else{
qDebug() << "Using italian";
}
Однако это не работает. Например, если система на английском языке, переводчик не работает и используется язык приложения по умолчанию (в данном случае итальянский).
Выход из qDebug()
является:
ЯЗЫК QLocale:: Английский правда
Добавление перевода true true
1 ответ
Проблема в том, что translator
объект уничтожается, как только выполнение программы выходит из вашего if
тело заявления, где оно было определено. Что вы можете сделать, это:
[..]
if (phoneLang != QLocale::Italian) {
QTranslator *translator = new QTranslator;
bool loaded = translator->load(":/notizie_en_UK.qm");
bool installed = app.installTranslator(translator);
qDebug() << "Adding translation" << loaded << installed;
}
[..]
Однако вы должны позаботиться о разрушении translator
возражать себя, когда это необходимо.
ОБНОВИТЬ:
Вы можете определить родителя вашего переводчика, который будет очищать его дочерние объекты. Например:
// The application is translator's parent.
QTranslator *translator = new QTranslator(app);