Er fragt zunächst den Namen und Speicherort der Projekts ab. Als Projektname ergibt Caesar Sinn, das Verzeichnis existiert bereits. Im nächsten Dialog verwenden Sie die Vorgabe Desktop und auch im folgenden übernehmen Sie die Vorgabe. Für ein erstes Beispielprojekt benötigen Sie noch keine Versionskontrolle; klicken Sie hier direkt auf Finish.
Qt Creator öffnet nun direkt die Datei mainwindow.cpp, die bereits generierten Code enthält. Sie kompilieren und starten ihn mit einem Klick auf den fetten grünen Pfeil auf der linken Seite. Daraufhin öffnet sich ein leeres Fenster mit dem Namen MainWindow. Mit einem Klick auf das rote Quadrat beenden Sie das Programm wieder.
Der grüne Pfeil unterhalb des Quellcodes startet das Programm, ohne es vorher neu zu bauen. Behalten Sie diese Tatsache im Hinterkopf, sonst kommt es leicht zu Verwirrungen, wenn die Software Änderungen am Code scheinbar ignoriert.
Um dem Programm die nötigen Frontend-Komponenten hinzuzufügen, doppelklicken Sie auf die Datei mainwindow.ui. Das startet den Frontend-Designer (Abbildung 2), in dem Sie nun per Drag & Drop die nötigen Komponenten in den Designbereich in der Mitte positionieren.
Oben rechts befindet sich eine Übersicht aller Komponenten, darunter ordnet die Software die Eigenschaften der aktuellen Komponente an. Hier lassen sich alle Eigenschaften einer Komponente verändern. Mit einem Doppelklick auf den Namen der Komponente editieren Sie diese. Geben Sie den Komponenten sprechende Namen, das erleichtert das Arbeiten enorm. Wenn Sie zusätzlich in den Namen den Typ der Komponente integrieren, hilft das später beim Suchen von Komponenten ungemein.
Aktuell stellen die Buttons im Frontend nur Platzhalter dar. Das lässt sich aber schnell ändern. Wählen Sie nach einem Rechtsklick auf einen der Buttons die Funktion Go to slot aus dem Kontextmenü aus. Daraufhin öffnet sich ein Dialog (Abbildung 3) mit allen Signalen, die ein Button in Qt senden kann.
Ein Doppelklick auf clicked() erzeugt automatisch die entsprechende Methode in der Datei mainwindow.cpp und öffnet sie im Editor. Wir müssen diese Methode nur noch mit Leben füllen. Beachten Sie, dass dieser Vorgang auch in der mainwindow.h eine entsprechende Methodendefinition anlegt.
Falls Sie eine Methode löschen, dürfen Sie nicht vergessen, die dazugehörige Definition ebenfalls zu entfernen; andernfalls gibt der Compiler einen Fehler aus. Manchmal erscheinen Komponenten, die vorhanden sein sollten, nicht in den Kontextmenüs. In den meisten Fällen hilft hier das Speichern aller Dateien (File | save all) und danach ein Bauen des kompletten Projekts (Build | build all). Je nachdem, welches RasPi-Modell Sie verwenden, dauert es eventuell einen Moment, bis die Software alle Informationen im Hintergrund aktualisiert.
Ran an den Code
Bisher haben wir das Programm nur zusammengeklickt. Jetzt geht es um den dahinterliegenden Code. Listing 2 zeigt die beiden Methoden, die hinter den Buttons liegen. Die Namen der Methoden generiert Qt Creator automatisch anhand der Komponenten- und Signalnamen.
Listing 2
Callback-Methoden
void MainWindow::on_bDecrypt_clicked()
{
qDebug() << "Decrypt clicked";
ui->tfText->setText(ui->tfText->toPlainText().toUpper());
QString ctext="";
QString text=ui->tfText->toPlainText();
for (int i=0;i< text.length();i++){
if((text.at(i)).toUpper().isLetter()){
uint code=((text.at(i)).toUpper()).unicode();
code=code-static_cast<uint>( (ui->tfRotation->toPlainText()).toInt());
if (code<65){code=code+26;}
ctext=ctext+QString::fromUcs4(&code,1);
} else {
ctext=ctext+text.at(i);
}
}
ui->tfCryptedText->setText(ctext);
}
void MainWindow::on_bEncrypt_clicked()
{
qDebug() << "Encrypt clicked";
ui->tfText->setText(ui->tfText->toPlainText().toUpper());
QString ctext="";
QString text=ui->tfText->toPlainText();
for (int i=0;i< text.length();i++){
if((text.at(i)).toUpper().isLetter()){
uint code=((text.at(i)).toUpper()).unicode();
code=code+static_cast<uint>( (ui->tfRotation->toPlainText()).toInt());
if (code>90){code=code-26;}
ctext=ctext+QString::fromUcs4(&code,1);
} else {
ctext=ctext+text.at(i);
}
}
ui->tfCryptedText->setText(ctext);
}
Das erste Kommando in den Methoden lautet qDebug() << "Text". Wie der Name schon vermuten lässt, erzeugen Sie damit eine Ausgabe auf der Debug-Konsole. Alternativ leiten Sie die Ausgaben von qDebug() auch in eine Datei um. Um diese Methode zu verwenden, müssen Sie sie zunächst mit #include <QDebug> importieren.
Die nächste Zeile wandelt die Texteingaben im Textfeld in Großbuchstaben um. Hier sehen Sie sehr schön, wie sich die Komponenten des Frontends im Code ansprechen lassen. Üblicherweise genügt es, ui-> einzugeben, um eine Liste der möglichen Komponenten zu erhalten. Nach Auswahl der gewünschten Komponente erscheinen die dazu passenden Methoden.
Der Rest des Codes liest das Eingabefeld in einen QString, verschiebt die Zeichen um die in Rotation vorgegebene Anzahl an Stellen und gibt sie in tfCryptedText aus. Interessant ist, dass sich hier althergebrachter C- und moderner C++-Code mischen lassen.
Das Programm (Abbildung 4) verschlüsselt nur Großbuchstaben, nicht jedoch Zahlen und Sonderzeichen. Erreicht es beim Verschlüsseln das Ende des Alphabets, springt es auf den Anfang zurück. Das große A entspricht in der ASCII-Codierung dem dezimalen Wert 65, den das Tool daher als untere Grenze des Wertebereichs verwendet. Das Z stellt mit dem Dezimalwert 90 die Obergrenze dar. Die zweite Methode funktioniert fast genauso wie die erste, nur dass sie die Werte in die Gegenrichtung verschiebt.
Das komplette Projekt finden Sie im Download-Bereich der Raspberry-Pi-Geek-Webseite. Möchten Sie sich intensiver mit Qt und dem Qt Creator auseinandersetzen, empfehlen wir das Tutorial “Getting Started with Qt” [2] als guten Einstieg. Bei konkreteren Problemen hilft die Qt-Dokumentation [3] mit vielen Beispielen weiter. Für speziellere Fragen bietet das Qt-Forum [4] eine gute Anlaufstelle.








