Seite 1 von 1

[gelöst] Einfache Lösung für Umlaute mit QStrings in Qt5

Verfasst: 12. Dezember 2014 15:58
von matthiasw
Hallo alle zusammen,

gibt es eine einfache Lösung, um QStrings in Qt5 mit deutschen Umlauten anzulegen? Zum Beispiel über ein globales DEFINE in der Projektdatei oder ähnlichem?

Ich habe ein Programm von Qt 4.7.4 nach Qt 5.4 portiert, muss jetzt aber alle QStrings mit Umlauten (das sind einige wegen "Datei wählen", "Datei öffnen", usw.) abändern, damit sie korrekt angezeigt werden.

Ein Beispiel:

Code: Alles auswählen

QString tmp1 = "Das wird in Qt 4 richtig angezeigt, in Qt fünf nicht!";
QString tmp2 = QLatin1String("Das wird auch in Qt fünf richtig angezeigt.");
Das Problem ist scheinbar, dass QString die "const char *" anders einliest, als das noch in Qt4 der Fall war. Jedenfalls ist es müssig, alle Zeichenketten noch in ein QLatin1String(...) zu packen. Aber vielleicht geht es ja auch einfacher?

Viele Grüße

Matthias

Re: Einfache Lösung für Umlaute mit QStrings in Qt5

Verfasst: 12. Dezember 2014 19:50
von sowas
z.B. wie in in Qt 4.7.4 mit:

seleBtn = new QPushButton(trUtf8("Wählen"));

Re: Einfache Lösung für Umlaute mit QStrings in Qt5

Verfasst: 13. Dezember 2014 15:34
von Christian81
Umlaute sind im Quellcode zu vermeiden. Dass es in Qt4 geht und in Qt5 nicht ist eher verwunderlich aber du bist sicher unter Windows. Unter Linux wäre es wohl genau umgekehrt. Eine Zeichenkette hat per default keine Codierung und in Qt4 wird ein char - Array mittels QString::fromAscii() in einen QString konvertiert, in Qt5 mittels QString::fromUtf8().

Re: Einfache Lösung für Umlaute mit QStrings in Qt5

Verfasst: 15. Dezember 2014 07:50
von matthiasw
Stimmt, ich bin unter Windows 7, das hatte ich nicht erwähnt.

Du meintest, Umlaute vermeiden? Hm. Dann müssten alle Zeichenketten aus einer separaten Datei eingelesen werden oder wie geht man da vor? Was ich vermeiden möchte, ist es, jede Zeichenkette in diese tr...()-Funktionen zu packen, da es keine anders-sprachige Version außer der deutschen geben wird.

Auf meine äs, ös und üs möchte ich aber nicht verzichten, da die GUI deutsch bleiben soll und "Datei waehlen" nicht wirklich gut aussieht.

Viele Grüße

Matthias

Re: Einfache Lösung für Umlaute mit QStrings in Qt5

Verfasst: 15. Dezember 2014 08:36
von MichaelS
Christian81 hat geschrieben:Umlaute sind im Quellcode zu vermeiden. Dass es in Qt4 geht und in Qt5 nicht ist eher verwunderlich aber du bist sicher unter Windows. Unter Linux wäre es wohl genau umgekehrt. Eine Zeichenkette hat per default keine Codierung und in Qt4 wird ein char - Array mittels QString::fromAscii() in einen QString konvertiert, in Qt5 mittels QString::fromUtf8().
Grundsätzlich gebe ich Dir ja recht. Da ich aber ich auch keine Lust verspüre, QTranslator zu bemühen, um in einer rein deutschsprachigen Anwendung Umlaute zu haben, halte ich mich da auch nicht dran und vewende Umlaute - wie von sowas beschrieben - in Kombination mit trUtf8(). Das hat bisher, sowohl mit Qt4 wie auch mit Qt5 unter Linux und unter Windows einwandfrei funktioniert.

Re: Einfache Lösung für Umlaute mit QStrings in Qt5

Verfasst: 15. Dezember 2014 09:52
von matthiasw
Die Funktion trUtf8() habe ich gerade getestet, Umlaute werden NICHT korrekt ausgegeben, ebenso bei tr(). Die Hilfe zu trUtf8() markiert die Funktion zudem als "obsolete" (Qt 5.4).

Eine Funktion trAscii() oder trLatin1() scheint es nicht zu geben. Einzig das Kapseln über den QLatin1String-Wrapper führt bei mir zum gewünschten Ergebnis. Dabei werde ich jetzt bleiben.

Viele Grüße

Matthias

Re: Einfache Lösung für Umlaute mit QStrings in Qt5

Verfasst: 15. Dezember 2014 13:07
von MichaelS
[quote="matthiasw"]Die Funktion trUtf8() habe ich gerade getestet, Umlaute werden NICHT korrekt ausgegeben, ebenso bei tr().
Matthias[/quote

Bei mir funktioniert es auch mit trUtf8(). Aber - wie Christian ja zu recht anmerkt - der korrekte Weg ist es nicht.

Re: Einfache Lösung für Umlaute mit QStrings in Qt5

Verfasst: 15. Dezember 2014 16:14
von softwaremaker
Das Hauptproblem ist doch in welcher Kodierung die CPP-Datei vorliegt.
Im Qt-Creator wird seit einiger Zeit als default utf8 verwendet, bei alten Projekten muss ich auch immer erst die Quellen in utf8 + BOM umwandeln, da sonst der QtCreator das Encoding nicht erkennt. Ist das so festgelegt, sollte es mit QString("äöü") klappen.

Re: Einfache Lösung für Umlaute mit QStrings in Qt5

Verfasst: 15. Dezember 2014 16:57
von matthiasw
Bei Zeichenkodierung UTF-8 konnten die Quellcodedateien gar nicht editiert werden, weil die Umlaute nicht im Zeichensatz enthalten sind. Ich habe die Vorgabe auf "System" umstellen müssen, dass müsste sowas sein wie ISO-8859-1/Latin1. Das hat aber bezüglich der Anzeige von Umlauten im Programm (nicht im Editor) nichts geändert.

Ich denke, wie Christian bereits sagte, liegt es "nur" an der Umstellung, wie QStrings Zeichenketten vom Typ const char* einlesen, nämlich nicht mehr über QString::fromAscii() wie in Qt 4.7.4, sondern in Qt 5.4 über QString::fromUtf8().

Viele Grüße

Matthias

Re: Einfache Lösung für Umlaute mit QStrings in Qt5

Verfasst: 16. Dezember 2014 14:11
von Christian81
Auch in UTF-8 gibt es Umlaute ... und es liegt definitiv an der Codierung der Quellcodedatei, die Codierung des Compiliers und unter Umständen sogar das aktuelle Encoding des System wenn mn z.B. QString::fromLocal8Bit() benutzt. Deshalb: nur ASCII in Quellcode, der Rest per linguist.

Re: Einfache Lösung für Umlaute mit QStrings in Qt5

Verfasst: 26. Januar 2015 08:53
von matthiasw
Stimmt, ich habe die Codierung der Quellcodedatei nicht bedacht...

Meine Dateien sind alle ANSI-codiert, stelle ich die per Notepad++ auf UTF-8 um, gehen auch die Umlaute normal als QString. In diesem Fall macht QLatin1String wieder keinen Sinn, weil dann die Umlaute wieder anders interpretiert werden.

Gruß

Matthias