mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-23 17:41:41 +00:00
[qt/de] Translate qt to german
This commit is contained in:
parent
65d4f596cd
commit
aa94772b92
175
de-de/qt-de.html.markdown
Normal file
175
de-de/qt-de.html.markdown
Normal file
@ -0,0 +1,175 @@
|
||||
---
|
||||
category: tool
|
||||
tool: Qt Framework
|
||||
language: c++
|
||||
filename: learnqt-de.cpp
|
||||
contributors:
|
||||
- ["Aleksey Kholovchuk", "https://github.com/vortexxx192"]
|
||||
translators:
|
||||
- ["Dennis Keller", "https://github.com/denniskeller"]
|
||||
lang: de-de
|
||||
---
|
||||
|
||||
**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](https://learnxinyminutes.com/docs/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.
|
||||
|
||||
```c++
|
||||
/*
|
||||
* 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](http://doc.qt.io/qt-5/qtwidgets-index.html)
|
||||
|
||||
```c++
|
||||
/*
|
||||
* 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](http://doc.qt.io/qt-5/signalsandslots.html)
|
||||
|
||||
|
||||
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.
|
||||
|
||||
```c++
|
||||
// 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
|
||||
```
|
||||
|
||||
```c++
|
||||
// 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
|
||||
|
||||
- [Qt 4.8 tutorials](http://doc.qt.io/qt-4.8/tutorials.html)
|
||||
- [Qt 5 tutorials](http://doc.qt.io/qt-5/qtexamplesandtutorials.html)
|
||||
|
||||
Viel Erfolg und viel Spaß!
|
Loading…
Reference in New Issue
Block a user