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

Alles rund um die Programmierung mit Qt
Antworten
matthiasw
Beiträge: 20
Registriert: 24. April 2014 13:50

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

Beitrag 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
Zuletzt geändert von matthiasw am 26. Januar 2015 08:55, insgesamt 1-mal geändert.
sowas
Beiträge: 105
Registriert: 19. September 2006 16:02

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

Beitrag von sowas »

z.B. wie in in Qt 4.7.4 mit:

seleBtn = new QPushButton(trUtf8("Wählen"));
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

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

Beitrag 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().
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
matthiasw
Beiträge: 20
Registriert: 24. April 2014 13:50

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

Beitrag 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
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

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

Beitrag 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.
matthiasw
Beiträge: 20
Registriert: 24. April 2014 13:50

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

Beitrag 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
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

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

Beitrag 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.
softwaremaker
Beiträge: 149
Registriert: 1. April 2009 19:25

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

Beitrag 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.
matthiasw
Beiträge: 20
Registriert: 24. April 2014 13:50

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

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

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

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
matthiasw
Beiträge: 20
Registriert: 24. April 2014 13:50

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

Beitrag 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
Antworten