【问题标题】:QTranslator not working when used in a if statementQTranslator 在 if 语句中使用时不起作用
【发布时间】:2019-08-21 10:14:24
【问题描述】:

我使用 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::English true

添加翻译真真

【问题讨论】:

    标签: c++ qt qt5 qtranslator


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2013-01-24
      • 2017-05-22
      • 1970-01-01
      • 2012-07-16
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      • 2016-04-25
      相关资源
      最近更新 更多