Qt für C++ Anfänger: Erste UI-Erweiterungen

Aus Wikibooks

Als erste Erweiterung sollen am UI ein paar Veränderungen vorgenommen werden – ohne den Qt-Designer. In den Inputfeldern von A und B soll ein Startwert von "0" vorgegeben werden.

Dazu muss als erstes herausgefunden werden, wie man in dem QLineEdit-Objekt einen Text eintragen kann. Dazu schaut man in der QLineEdit-Dokumentation nach einer Funktion, die sich so anhört, als ob man sie gebrauchen könnte. Nach einiger Zeit hat man darin etwas Übung. Schaut man in die Dokumentation, findet man zwei Funktionen, die passen könnten, setText() und insert(). Beide würden das machen, was wir hier erreichen wollen. Wir wählen setText(). Die Syntax der Funktion ist laut Dokumentation:

void setText ( const QString & )

Die Funktion liefert keinen Rückgabewert, da dieser mit "void" angegeben ist. Als Input-Parameter wird ein "const QString &" erwartet. Man erkennt leicht, dass vom Typ her ein QString, das ist im wesentlichen ein normaler String, erwartet wird. Bleibt noch zu klären, was "const" und "&" bedeuten. Das "const" gibt an, dass sich der Wert der Variable innerhalb der Funktion nicht ändert bzw. nicht geändert werden darf. Würde man sie innerhalb der Funktion versuchen zu verändern, würde es einen Compiler-Error geben. Da wir die Funktion nicht selber schreiben, sondern sie von Qt vorgegeben ist, muss einen das "const" nicht weiter stören. Ferner erlaubt das "const", dass man explizite Werte, also z.B. "Ich bin ein String", direkt mitgeben kann. Ohne das "const" wäre das nicht möglich. Das "&" gibt an, dass man ein so genanntes "Passing by reference" macht. Man gibt beim Aufruf der Funktion nur die Variable an, aber implizit wird die Adresse, an der die Variable steht, weitergereicht. Sprich, sollte die Variable innerhalb der Funktion verändert werden, so hat diese Änderung auch außerhalb der Funktion Gültigkeit. Da wir oben gesehen haben, dass die Variable nicht geändert wird, erscheint das erstmal als rein theoretisches Konstrukt. Hintergrund ist, dass es so schneller in der Ausführung ist, als wenn man ein "Passing by value" machen würde. Kurz zusammen gefasst sagt uns obiges Argument einfach nur, dass man ein QString-Objekt übergeben muss.

Als nächstes muss man sich überlegen, wie der Befehl konkret aussieht:

InputA -> setText("0");

InputA ist der Name, den wir dem QLineEdit-Objekt im Designer gegeben haben. InputA ist aber nur ein Pointer auf diese Instanz, will man eine Funktion einer Instanz aufrufen, nutzt man den Operator "->".

Jetzt ist nur noch die Frage offen, wo der Code für InputA und InputB eingefügt werden muss. Da die Eigenschaften von Anfang an gegeben sein sollen, ist der geeignete Platz der Konstruktor. Die einzige Datei, welche wir ändern müssen, ist also "Taschenrechner.cpp".

//--- Taschenrechner.cpp - start ---

#include "Taschenrechner.h"

Taschenrechner::Taschenrechner(QMainWindow *parent) : QMainWindow(parent){	
	setupUi(this);
	InputA -> setText("0");
	InputB -> setText("0");
}

Taschenrechner::~Taschenrechner(){
}

//--- Taschenrechner.cpp - end ---

Nun einfach erneut "make" ausführen und das Programm starten, um die Änderung zu sehen. Als nächstes könnte man die beiden neuen Zeilen gegen diese austauschen:

	InputA -> insert("0");
	InputB -> insert("0");