QTranslator 在 if 语句中使用时不起作用
Posted
技术标签:
【中文标题】QTranslator 在 if 语句中使用时不起作用【英文标题】:QTranslator not working when used in a if statement 【发布时间】: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
添加翻译真真
【问题讨论】:
【参考方案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);
【讨论】:
以上是关于QTranslator 在 if 语句中使用时不起作用的主要内容,如果未能解决你的问题,请参考以下文章
用于在链接服务器上执行 DDL 语句的 Powershell 脚本 - 使用 SSIS 运行时不起作用
在 v-if 和 else 条件内给出 btn-next 时不起作用?
带有if和else语句的foreach循环在if语句为假时不执行else语句
为啥 Desktop.Open() 在安装 MagicISO 时不起作用