2017-09-04 2 views
0

Ich möchte die Sprache mit QCoreApplication::installTranslator mit ein paar verschiedenen .qm Dateien für jede Sprache ändern (verschiedene Teile des Projekts führen zu verschiedenen .qm-Dateien).Wie kann ich alle QTranslator aus der App entfernen?

Es ist in Ordnung, mehr als eine .qm-Datei zu verwenden:

QCoreApplication::installTranslator(QTranslator *translationFile)
mehrere Übersetzungsdateien installiert werden kann. Übersetzungen werden für in der umgekehrten Reihenfolge, in der sie installiert wurden, gesucht, so dass die zuletzt installierte Übersetzungsdatei zuerst gesucht wird und die erste Übersetzungsdatei zuletzt installiert ist.

Aber wenn ich nicht die älteren Übersetzer remove bin, sind sie immer noch Kandidaten für Übersetzungen. Obwohl sie die weniger kürzlich installierten Übersetzer sein würden.

Wie kann ich eine zuvor geladene Datei löschen, bevor ich die gewünschten geladen habe?

Die einzige Weise, die ich sehe, ist, die Zeiger zu behalten, die ich installierte und entferne sie eins nach dem anderen, wenn ich mich ändern möchte, aber gibt es etwas einfacheres?

+0

Sie den Code zeigen können, dass Sie besser einen Kommentar zu verstehen. – eyllanesc

+0

Behalten Sie einfach eine Liste der alten Übersetzer bei. Oder verwenden Sie ein gemeinsames Elternelement (es kann ein Dummy 'QObject' sein), um es zu verwalten. In diesem Fall können Sie die entsprechenden Übersetzungen entfernen. Ich sehe nicht, dass es ein Problem sein sollte. –

+0

@MarekR ist es nicht, aber es wäre bequem, die QApp es tun zu lassen, weil es die Übersetzer, die Sie installiert haben, bereits kennt, könnte es einfach seine private Liste von Übersetzern löschen, anstatt dass ich sie einzeln entfernen muss. – ymoreau

Antwort

0

halten ich eine Liste der installierten Übersetzer:

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

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

Und um sie zu entfernen alle:

for (auto translator : qAsConst(m_currentTranslators)) { 
    QCoreApplication::removeTranslator(translator.data()); 
} 
m_currentTranslators.clear(); 
Verwandte Themen