Bevor wir nun mit der Erstellung von grafischen Oberflächen beginnen, kommen wir zu einem sehr allgemeinen, aber auch sehr wichtigen Thema: Die Verwaltung von Texten in Qt.
Qt bietet eine eigene Klasse mit dem Namen QString
um Zeichenketten abzuspeichern. Viele werden sich wundern wozu das gut sein soll, da std::string
doch bereits eine komfortable Abstraktion darstellt. Der größte Vorteil von QString
ist die Unterstützung von Unicode, die für die Erstellung mehrsprachiger Anwendungen unerlässlich ist. Alle Qt-Klassen (auch alle Widgets) verwenden QString
zum Speichern von Text. Änderung der Zeichenkodierung, sowie die Verwendung mit Qt-Streams (zum Schreiben in eine Datei, Senden übers Netzwerk, etc.) sind ebenfalls möglich.
Die Verwendung von QString
ist größtenteils selbsterklärend und wird in den folgenden Abschnitten kurz erklärt.
Die Verwendung des Default-Konstruktors erzeugt logischerweise einen leeren String. Als Parameter kann der Inhalt angegeben werden. Dabei stehen mehrere Typen zur Auswahl, die am häufigsten verwendete ist jedoch ein konstanter char-Array:
QString str( "proggen.org" );
Die direkte Ausgabe von QString
-Objekten über std::cout
in der Konsole ist nicht möglich, dazu muss mit der Methode toStdString()
eine Umwandlung in einen std::string
vorgenommen werden. Eine Alternative bieten die Qt-spezifischen Debug-Ausgaben.
QString str( "proggen.org" ); // Konvertierung nach std::string std::cout << str.toStdString() << std::endl; // Qt-Methode qDebug() << str;
Ausgabe:
proggen.org "proggen.org"
Bei der letzteren Methode wird der String unter Anführungszeichen gesetzt und danach ein Zeilenumbruch ausgegeben.
Da Qt auf die Erstellung von grafischen Oberflächen spezialisiert ist, gibt es keine Möglichkeit Strings von der Konsole einzulesen (die in Standard C und C++ enthaltenen Funktionen natürlich ausgenommen).
Überladene Operatoren vereinfachen die Verwendung und Lesbarkeit von QString
noch zusätzlich.
Die Zuweisung eines Strings ist mit dem normalen Zuweisungsoperator möglich:
QString str; str = "proggen.org";
Die Zuweisung von Strings ist sehr effizient, da intern Implicit Sharing angewendet wird.
Strings können über den +-Operator bzw. den +=-Operator und die Methode append()
verkettet werden.
QString str1( "proggen" ), str2( "." ), str3( "org" ), result; result = str1.append( str2 + str3 ); qDebug() << result;
Ausgabe:
"proggen.org"
Da append()
eine Referenz auf das veränderte Objekt zurückliefert, ist auch folgendes möglich und bringt das gleiche Ergebnis:
result = str1.append( str2.append( str3 ) );
Der ==-Operator führt einen tatsächlichen Vergleich des Strings durch (wie in C++, anders als in C und Java, wo nur Adressen bzw. Referenzen verglichen werden).
QString str1( "proggen.org" ), str2( "proggen.org" ); if( str1 == str2 ) qDebug() << "Strings sind gleich"; else qDebug() << "Strings sind NICHT gleich";
Ausgabe:
"Strings sind gleich"
Es existiert auch die Methode compare()
, dessen Rückgabewerte jenen von strcmp() entsprechen.
Mit der Methode arg()
können spezielle Argumente dynamisch in den String eingefügt werden. Dabei werden %1, %2, usw. als Platzhalter verwendet. Der Vorteil gegenüber den aus C bekannten FormatStrings ist, dass keine Datentypen angegeben werden müssen. Weiters kann sich aufgrund der eindeutigen Nummerierung die Reihenfolge innerhalb des Strings beliebig ändern, was eine wichtige Funktionalität für die Internationalisierung von Anwendungen ist.
// Platzhalterstring zuweisen str = "%2.%1"; // String mit Platzhaltern ausgeben qDebug() << "String mit Platzhaltern: " + str; // Strings anstelle von Platzhaltern qDebug() << "Platzhalter ersetzen: " + str.arg( "org", "proggen" );
Ausgabe:
"String mit Platzhaltern: %2.%1" "Platzhalter ersetzen: proggen.org"
Dieses Kapitel soll nur einen kurzen Überblick über die Verwendungsmöglichkeiten von QString
bieten. Als Qt-Programmierer sollte man sich angewöhnen immer diese Klasse anstelle von std::string
zu verwenden, die Verwendung ist intuitiv und leicht zu erlernen.