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);
Другие вопросы по тегам