2017-09-04 49 views
0

我想更改語言使用QCoreApplication::installTranslator與幾種不同的.qm文件爲每種語言(項目的不同部分導致不同的.qm文件)。如何從應用中刪除所有QTranslator?

這是蠻好用的一個以上的.qm文件都:

QCoreApplication::installTranslator(QTranslator *translationFile)
多個翻譯文件可以安裝。翻譯按照與其安裝順序相反的順序搜索 ,因此最先搜索最近安裝的翻譯文件的最多 ,並且最後搜索安裝的第一個 翻譯文件。

但是,如果我不是remove舊譯者,他們仍然是翻譯的候選人。儘管他們會是最近安裝的翻譯人員。

如何在加載想要的文件之前清除之前加載的任何文件?

我看到的唯一方法是保持我安裝的指針,並在我想要更改時逐個刪除它們,但有沒有更直接的方法?

+0

你能證明你對此有何評論更好地理解代碼。 – eyllanesc

+0

只需保留一些舊譯員列表。或者使用一些常見的父級(可以是一些虛擬的'QObject')來維護它。在這種情況下,您將能夠刪除相應的翻譯。我不認爲這應該是一個問題。 –

+0

@MarekR它不是,但QApp這樣做會很方便,因爲它已經知道你安裝的翻譯器,它可以清除它的私人轉換器列表,而不是讓我逐一刪除它們。 – ymoreau

回答

0

我保持安裝的轉換器列表:

// Install the translators 
for (auto fileName : qAsConst(fileList)) { 
    auto translator = QSharedPointer<QTranslator>::create(); 
    translator->load(fileName); 

    m_currentTranslators << translator; 
    QCoreApplication::installTranslator(translator.data()); 
} 

,並拆去所有:

for (auto translator : qAsConst(m_currentTranslators)) { 
    QCoreApplication::removeTranslator(translator.data()); 
} 
m_currentTranslators.clear(); 
相關問題