2010-12-17 3 views
2

In meiner App, QApplication subclassing, um eine Menge Dinge zu tun, wie zentralisierte Ausnahmebehandlung, SQLite Datenbankverbindung, Initialisieren von Standardeinstellungen (wenn nötig) über QSettings. Und vor allem das Laden von Übersetzungen. Ich mache es im Konstruktor, und wenn ich es tue:Qt: Ich kann Übersetzer in Unterklasse von QApplication nicht installieren

installTranslator (&translator); 
qDebug() << "Translation from PApplication:" 
     << translate ("PAddFormWindow", "Dialog"); 

Ich bekomme wieder sehr richtig Übersetzung (in Russisch). Aber in meiner App sehe ich alles auf Englisch. Was noch schlimmer ist, ich sehe es auch in Englisch, wenn ich versuche Übersetzung zu erhalten immediatelly nach meiner Anwendung Objekt initialisiert wird:

PApplication a ("PCorrect", argc, argv); 
qDebug() << "Translation from void main():" 
     << a.translate ("PAddFormWindow", "Dialog"); 

Also, warum wird es nicht funktionieren? Liegt es daran, dass ich es im Konstruktor mache? Ich sollte auch erwähnen, dass die PApplication-Klasse nicht in der App selbst deklariert und definiert ist, sondern in einer dynamisch geladenen Bibliothek (ich entwickle eine Anwendungssuite). Und dass meine Plattform Windows XP mit Qt 4.7.0 ist.

+1

Nur um zu überprüfen: Wenn Sie 'installTranslator (& Übersetzer)', Sie beziehen sich nicht auf eine lokale Variable namens "Übersetzer", richtig? Ist es ein Feld oder etwas? –

+0

@Sergey: Oh mein Gott. Wie Oh mein Gott. Ich dachte, Übersetzer wird bei der Installation kopiert :) Bitte, mach es eine Antwort, damit ich +1 geben und es akzeptieren kann. – Septagram

Antwort

4

Es könnte sein, dass &translator in installTranslator(&translator) auf eine lokale Variable verweist, die beim Beenden des Konstruktors zerstört wird. Wenn installTranslator() es nicht kopiert (Dokumente sind zu diesem Thema nicht sehr klar), kann alles passieren, einschließlich nicht funktionierender Übersetzungen oder sogar Segmentfehlern.

Tatsächlich geben uns die Dokumente einen Hinweis: "Das Installieren oder Entfernen eines QTranslators, oder das Ändern eines installierten QTranslators erzeugt ein LanguageChange-Ereignis". Die Tatsache, dass wir einen Übersetzer ändern können und etwas beeinflusst, legt nahe, dass es nicht kopiert wird. Aber es ist immer noch sehr unklar. Es hätte explizit gesagt, ob es kopiert wird oder nicht und wie wir damit umgehen sollen.

+0

Danke. Keine segfaults für mich, nur fehlende Übersetzung :) – Septagram

+0

Danke auch! Ich hatte das gleiche Problem - +1 für deine Hilfe :) –