Teile diese Seite mit anderen

Lerne X in Y Minuten

Wobei X=Qt Framework

Qt ist ein weithin bekanntes Framework zum Entwickeln von cross-platform Software, die auf verschiedenen Hard- und Softwareplatformen mit wenig oder keinen Veränderungen im Code läuft. Dabei besitzt man die Power und Geschiwindigkeit von nativen Anwendungen. Obwohl Qt ursprünglich in C++ geschrieben wurde, gibt es verschiedene Ports für andere Sprachen: PyQt, QtRuby, PHP-Qt, etc.

Qt eignet sich hervorragend zum Erstellen von Anwendungen mit grafischer Benutzeroberfläche (GUI). Dieses Tutorial zeigt, wie man das in C++ macht.

/*
 * Lass uns klassisch starten
 */

// Alle Header vom Qt Framework starten mit dem Großbuchstaben 'Q'.
#include <QApplication>
#include <QLineEdit>

int main(int argc, char *argv[]) {
    // Erstellt ein Objekt um applikationsweit die Resourcen zu managen.
    QApplication app(argc, argv);

    // Erstellt ein Line edit Widget und zeigt es auf dem Bildschirm
    QLineEdit lineEdit("Hello world!");
    lineEdit.show();

    // Startet die Event Loop der Anwendung.
    return app.exec();
}

Die GUI bezogene Teile von Qt bestehen aus Widgets und den Verbindungen dazwischen.

Lies mehr über Widgets

/*
 * Lass uns Label und einen Button machen.
 * Ein Label soll auftauchen, wenn der Button gedrückt wird.
 * 
 * Der Qt Code spricht für sich selbst.
 */

#include <QApplication>
#include <QDialog>
#include <QVBoxLayout>
#include <QPushButton>
#include <QLabel>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QDialog dialogWindow;
    dialogWindow.show();

    // Füge ein vertikales Layout hinzu
    QVBoxLayout layout;
    dialogWindow.setLayout(&layout);  

    QLabel textLabel("Danke für das Knopf drücken");
    layout.addWidget(&textLabel);
    textLabel.hide();

    QPushButton button("Drück mich");
    layout.addWidget(&button);

    // Zeigt verstecktes Label, wenn der Button gedrückt wird.
    QObject::connect(&button, &QPushButton::pressed,
                     &textLabel, &QLabel::show);

    return app.exec();
}

Beachte den QObject::connect Teil. Diese Methode wird verwendet, um Signale eines Objekts mit den Slots eines Objektes zu verbinden.

Signale werden ausgegeben, wenn bestimmte Dinge mit Objekten passieren. Beispielsweise wird das pressed Signal ausgegeben, wenn der Benutzer auf das QPushButton Objekt drückt.

Slots sind Aktionen, die als Reaktion auf empfangene Signale ausgeführt werden können.

Lies mehr über Slots und Signale

Als Nächstes lernen wir, dass wir nicht nur Standard Widgets verwenden können, sondern auch ihr Verhalten mithilfe von Vererbung verändern können. Lass uns einen Button erschaffen, der zählt, wie häufig er gedrückt wird. Dafür definieren wir unsere eigene Klasse CounterLabel. Diese muss wegen der speziellen Qt Architektur in einer seperaten Datei deklariert werden.

// counterlabel.hpp

#ifndef COUNTERLABEL
#define COUNTERLABEL

#include <QLabel>

class CounterLabel : public QLabel {
    Q_OBJECT  // Qt definiertes Makro, welches in jedem modifizierten Widget vorhanden sein muss.

public:
    CounterLabel() : counter(0) {
        setText("Zähler wurde noch nicht erhöht.");  // Methode von QLabel
    }

public slots:
    // Aktion, die ausgeführt wird, wenn der Button gedrückt wird.
    void increaseCounter() {
        setText(QString("Zähler Wert: %1").arg(QString::number(++counter)));
    }

private:
    int counter;
};

#endif // Zähllabel
// main.cpp
// Fast das Gleiche, wie das vorherige Beispiel

#include <QApplication>
#include <QDialog>
#include <QVBoxLayout>
#include <QPushButton>
#include <QString>
#include "counterlabel.hpp"

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QDialog dialogWindow;
    dialogWindow.show();

    QVBoxLayout layout;
    dialogWindow.setLayout(&layout);

    CounterLabel counterLabel;
    layout.addWidget(&counterLabel);

    QPushButton button("Drück mich nochmal.");
    layout.addWidget(&button);
    QObject::connect(&button, &QPushButton::pressed,
                     &counterLabel, &CounterLabel::increaseCounter);

    return app.exec();
}

Das wars! Natürlich ist das Qt Framework erheblich größer, als der der Teil der in diesem Tutorial behandelt wurde. Das heißt, es gibt viel zu lesen und zu üben.

Further reading

Viel Erfolg und viel Spaß!


Du hast einen Verbesserungsvorschlag oder einen Fehler gefunden? Erstelle ein Ticket im offiziellen GitHub Repo, oder du erstellst einfach gleich einen pull request!

Originalversion von Aleksey Kholovchuk, mit Updates von 2 contributor(s).