Seite 1 von 1
Sprache im laufenden Programm änderbar?
Verfasst: 29. Juli 2009 09:14
von bassjupp2oo8
Hallo!
Ich habe mal eine Frage:
Kann man es mit dem Linguist / Translator hinbekommen, dass man in einem laufenden Programm auf einen Button klickt und dann die GUI komplett in einer anderen Sprache dargestellt wird?
Aus den Dokumentationen lese ich bis jetzt nur raus, dass man erst die Translate-Dateien erstellt und dann quasi zwei verschiedene Programme erstellt, eben eins in Sprache1 und das andere in Sprache2.
Eigentlich möchte ich aber die Sprache zur Laufzeit hin und her wechseln können!
Verfasst: 29. Juli 2009 09:22
von archer
Natürlich geht das.
Die verschiedenen Scprachen mit dem Linguit und Co erstellen
Zur Laufzeit die jeweilige Sprachdatei laden (QTranslator).
Der Oberfläche sagen ui.retranslate(this).
Wenn du z.B. eigene Listen hast mußt du diese selber neu laden.
Verfasst: 29. Juli 2009 10:19
von bassjupp2oo8
Danke für die schnelle Antwort. Das beruhigt mich ja schon mal.
Habe auch ein Beispielprogramm mit Übersetzung komplett hinbekommen.
Aber ich nutze nicht den Qt Designer (falls du das mit dem ui. meinst).
Es gibt also ein HauptWidget, das auch alle anderen (Unter-)Seiten (eigene Klassen) erstellt und aufruft.
Wem kann ich den Aufruf retranslate(this) geben? Dem HauptWidget?
Wird das Widget/die ganze Anwendung dann auch neu gezeichnet (damit dann auf den Buttons die neue Bezeichnung steht?)
Verfasst: 29. Juli 2009 10:42
von archer
Das ui. bezog sich auf eine im Designer erstellte Oberfläche.
Ich denke du müsstest dir selber eine Methode schreiben die die Texte der Buttons und Co neu setzt.
z.B.:
Code: Alles auswählen
void CMy::changeLanguage()
{
btn->setText(tr("Button"));
...
}
Es wird dann der jeweilige Text aus dem Transator in das Widget gesetzt.
Was anderes weiß ich leider nicht.
Verfasst: 29. Juli 2009 10:49
von bassjupp2oo8
hm. das wäre bei einem großen Projekt natürlich seeehr umfangreich!
Aber mal sehen...
Ich probiere das grad im kleinen Beispielprogramm aus.
Dazu noch eine "Anfängerfrage". Ich erstelle ja in main.cpp den Translator mit QTranslator translator;
dann translator.load(...) usw.
aber wenn der Translator nun etwas neues laden soll (zB nach einem ButtonClick), dann passiert das ja in einer meiner Klassen. Von dort aus habe ich aber keinen Zugriff auf den translator. Wie kann man das lösen?
Könnte man in main.cpp einen Slot bauen, der das dann ausführt? Oder darf man so was in einer main datei nicht?
Verfasst: 29. Juli 2009 12:41
von bassjupp2oo8
Verfasst: 29. Juli 2009 12:46
von bassjupp2oo8
Und Beschreibung unter "Internationalization with Qt" in der Hilfe lesen!
(manchmal weiß man halt nur nicht, wonach man erst suchen soll!)