39.5 Wichtige Widgets 

Nachdem wir anhand eines kleinen Beispielprogramms in die Arbeit mit Qt eingestiegen sind, werden in diesem Abschnitt die wichtigsten Widget-Klassen vorgestellt, die Qt zur Verfügung stellt. Dabei finden Sie für jedes Steuerelement eine knappe Einführung sowie eine Tabelle, die die wichtigsten Methoden und Signale auflistet.
39.5.1 QCheckBox 

Die Klasse QCheckBox repräsentiert eine Checkbox an der grafischen Benutzeroberfläche. Eine Checkbox ist ein Steuerelement, das vom Benutzer entweder aktiviert oder deaktiviert werden kann und dabei in seiner Bedeutung unabhängig von anderen Checkboxes ist.
Methode | Beschreibung |
---|---|
checkState() | Gibt den Status der Checkbox zurück. Gültige Status sind QtCore.Qt.Checked, QtCore.Qt.Unchecked oder QtCore.Qt.PartiallyChecked. |
setCheckState(state) | Setzt den Status der Checkbox. Hier können die Status gesetzt werden, die von checkState zurückgegeben werden. |
Signal | Beschreibung |
stateChanged(int) | Wird gesendet, wenn der Benutzer den Status der Checkbox ändert. Der neue Status wird als Parameter übergeben. |
Tabelle 39.12 Wichtige Methoden und Signale von QCheckBox
39.5.2 QComboBox 

Die Klasse QComboBox repräsentiert eine Combobox, auch bekannt als Dropdown-Menü, auf der grafischen Benutzeroberfläche.
Methode | Beschreibung |
---|---|
addItem([icon], text) | Fügt ein Element mit dem Namen text zur Combobox hinzu. Optional kann eine QIcon-Instanz übergeben werden, um ein Icon neben dem Namen anzeigen zu lassen. |
clear() | Löscht alle Elemente der Combobox. |
currentIndex() currentText() |
Gibt den Index bzw. den Namen des ausgewählten Elements zurück. |
setModel(model) | Setzt ein QAbstractItemModel.* |
setView(itemView) | Setzt einen QAbstractItemView. |
Signal | Beschreibung |
currentIndexChanged(int) | Wird gesendet, wenn sich das ausgewählte Element ändert. Der Index dieses Elements wird als Parameter übergeben. |
* Näheres zur Model-View-Architektur von Qt erfahren Sie in Abschnitt 39.7. |
Tabelle 39.13 Wichtige Methoden und Signale von QComboBox
39.5.3 QDateEdit, QTimeEdit, QDateTimeEdit 

Die Klassen QDateEdit, QTimeEdit und QDateTimeEdit repräsentieren Widgets, die eine Datumsangabe bzw. Zeitangabe vom Benutzer einlesen. Dem Benutzer wird zur Eingabe ein Kalender angezeigt.
Die folgenden Methoden beziehen sich auf den Umgang mit Datumsangaben bei QDateEdit- und QDateTimeEdit-Widgets. Die Methoden setMinimumTime, setMaximumTime, minimumTime, maximumTime, setTime und time funktionieren analog für Zeitangaben bei QDateTimeEdit- und TimeEdit-Widgets.
Methode | Beschreibung |
setMinimumDate(date) setMaximumDate(date) |
Setzt das kleinstmögliche bzw. größtmögliche Datum. Für date kann eine QDate- oder eine datetime.date-Instanz übergeben werden. |
minimumDate() maximumDate() |
Gibt das kleinstmögliche bzw. größtmögliche Datum als QDate-Instanz zurück. |
setDate(date) | Setzt das im Widget angezeigte Datum. |
date() | Gibt das gewählte Datum als QDate-Instanz zurück. |
Signal | Beschreibung |
dateChanged(QDate) | Wird gesendet, wenn ein neues Datum ausgewählt wurde. |
Signal | Beschreibung |
dateTimeChanged(QDateTime) | Wird gesendet, wenn ein neues Datum oder ein neuer Zeitpunkt ausgewählt wurde. |
timeChanged(QTime) | Wird gesendet, wenn ein neuer Zeitpunkt ausgewählt wurde. |
Tabelle 39.14 Wichtige Methoden und Signale von QDateEdit
39.5.4 QDialog 

Die Klasse QDialog repräsentiert einen Dialog in der grafischen Benutzeroberfläche. Ein Dialog kann wie jede andere Widget-Klasse verwendet werden, mit dem Unterschied, dass sich Dialoge nicht in andere Widgets einbetten lassen.
Grundsätzlich unterscheidet man zwei Arten von Dialogen – modale und nicht modale Dialoge:
- Unter einem modalen Dialog versteht man einen Dialog, der sich im Vordergrund der Anwendung platziert und sich den Eingabefokus nimmt. Der Benutzer kann keine anderen Dialoge der Anwendung bedienen, während ein modaler Dialog geöffnet ist. Ein modaler Dialog bietet sich also für eine wichtige Teilkommunikation mit dem Benutzer an, die für den weiteren Programmlauf essenziell ist.
- Dem gegenüber steht der nicht modale Dialog. Wird ein Dialog nicht modal geöffnet, kann er parallel zum restlichen Teil der Anwendung bedient werden. Ein bekanntes Beispiel für einen nicht modalen Dialog ist der Suchen-und-Ersetzen-Dialog in einem Textverarbeitungsprogramm, bei dem es dem Benutzer möglich sein muss, während des geöffneten Dialogs Änderungen im Hauptfenster vorzunehmen.
Um einen Dialog modal anzuzeigen, wird die Methode exec aufgerufen. Diese blockiert den Programmfluss so lange, bis der Benutzer den Dialog beendet hat. Der Rückgabewert von exec gibt an, in welcher Form der Dialog beendet wurde. Es wird eine der beiden Konstanten QtCore.Qt.Accepted und QtCore.Qt.Rejected zurückgegeben, wobei die erste ein Beenden des Dialogs über den OK- und die zweite ein Beenden über den Abbrechen-Button repräsentiert. Innerhalb der Dialogklasse können die Methoden accept und reject aufgerufen werden, um den Dialog mit dem entsprechenden Rückgabewert zu beenden.
Ein nicht modaler Dialog wird mithilfe der Methode show angezeigt. Diese Methode kehrt sofort zurück, ohne auf das Beenden des Dialogs zu warten, und ermöglicht auf diese Weise das parallele Verarbeiten von Dialog und Hauptanwendung.
39.5.5 QLineEdit 

Die Klasse QLineEdit repräsentiert ein einzeiliges Eingabefeld in der grafischen Benutzeroberfläche.
Methode | Beschreibung |
---|---|
setText(text) | Setzt den Text des Eingabefelds. |
text() | Gibt den Text des Eingabefelds zurück. |
Signal | Beschreibung |
textChanged(QString) | Wird gesendet, wenn der Text des Eingabefelds verändert wurde. |
Tabelle 39.15 Wichtige Methoden und Signale von QLineEdit
39.5.6 QListWidget, QListView 

Die Klassen QListWidget und QListView repräsentieren Widgets zur Anzeige von Listen. Während es sich bei QListWidget um ein klassisches Widget handelt, verwendet QListView die Model-View-Architektur. Eine Einführung in das Konzept der Model-View-Programmierung anhand des QListView-Widgets finden Sie in Abschnitt 39.7. Ein QListWidget wird immer dann eingesetzt, wenn das Erstellen einer Model-View-Architektur für die anzuzeigenden Daten unverhältnismäßig aufwendig wäre und die Flexibilität, die eine Model-View-Architektur bietet, nicht benötigt wird.
Methode | Beschreibung |
---|---|
addItem(label) | Fügt einen Eintrag mit dem Namen label ans Ende der Liste an. |
currentItem() | Gibt den momentan ausgewählten Eintrag als QListWidgetItem-Instanz zurück. Den Namen des Eintrags finden Sie über die Methode text des Items heraus. |
Signal | Beschreibung |
currentItemChanged( QListWidgetItem, QListWidgetItem) | Wird gesendet, wenn ein neuer Eintrag ausgewählt wurde. Als Parameter werden der neu ausgewählte Eintrag und der zuvor ausgewählte Eintrag übergeben. |
Tabelle 39.16 Wichtige Methoden und Signale von QListWidget
39.5.7 QProgressBar 

Die Klasse QProgressBar repräsentiert einen Fortschrittsbalken in einer grafischen Benutzeroberfläche. Ein Fortschrittsbalken zeigt den Fortschritt einer langwierigen Operation an. Das QProgressBar-Widget erlaubt dabei keine Interaktion mit dem Benutzer.
Methode | Beschreibung |
---|---|
setMinimum(minimum) setMaximum(maximum) |
Setzt die ganzzahlige untere bzw. obere Grenze des Wertebereichs. |
setValue(value) | Setzt den aktuell darzustellenden Wert. Der Wert value muss ganzzahlig sein und in den angegebenen Grenzen liegen. |
setOrientation(orientation) | Setzt die Orientierung des Fortschrittsbalkens. Möglich sind die Werte QtCore.Qt.Horizontal und QtCore.Qt.Vertical für eine horizontale bzw. vertikale Ausrichtung. |
Tabelle 39.17 Wichtige Methoden von QProgressBar
39.5.8 QPushButton 

Die Klasse QPushButton repräsentiert eine Schaltfläche in der grafischen Benutzeroberfläche. Eine Schaltfläche ist ein beschriftetes Widget, auf das der Benutzer klicken kann, um eine Aktion auszulösen.
Methode | Beschreibung |
---|---|
setText(text) | Setzt die Beschriftung der Schaltfläche. |
Signal | Beschreibung |
clicked() | Wird gesendet, wenn der Benutzer auf die Schaltfläche geklickt hat. |
Tabelle 39.18 Wichtige Methoden und Signale von QPushButton
39.5.9 QRadioButton 

Die Klasse QRadioButton repräsentiert einen Radiobutton in der grafischen Benutzeroberfläche. Ein Radiobutton wird verwendet, um den Benutzer eine Auswahl aus mehreren vorgegebenen Möglichkeiten treffen zu lassen. Alle Radiobuttons eines Dialogs, die über dasselbe Eltern-Widget verfügen, gehören zu einer Gruppe. Innerhalb einer Gruppe kann immer nur ein Radiobutton aktiviert sein. Wenn der Benutzer einen anderen aktiviert, wird der vorher aktivierte deaktiviert. Um mehrere Gruppen von Radiobuttons in demselben Dialog unterzubringen, müssen diese über verschiedene Eltern-Widgets verfügen. Dazu bietet sich das Frame-Widget, repräsentiert durch die Klasse QFrame, an, das einem unsichtbaren Rahmen im Widget entspricht.
Methode | Beschreibung |
---|---|
isChecked() | Gibt den Status des Radiobuttons zurück. |
Signal | Beschreibung |
toggled() | Wird gesendet, wenn der Radiobutton aktiviert oder deaktiviert wurde. |
Tabelle 39.19 Wichtige Methoden und Signale von QRadioButton
39.5.10 QSlider, QDial 

Die Klasse QSlider repräsentiert einen Slider in der grafischen Benutzeroberfläche. Bei einem Slider handelt es sich um einen Schieberegler, wie Sie ihn beispielsweise von einem Mischpult her kennen. Grundsätzlich wird ein Slider dazu verwendet, den Benutzer einen ganzzahligen Wert auswählen zu lassen, der innerhalb eines bestimmten Bereichs liegen muss. Die Klasse QDial funktioniert ähnlich wie QSlider, entspricht aber einem Drehregler anstelle eines Schiebereglers.
Methode | Beschreibung |
---|---|
setMinimum(minimum) setMaximum(maximum) |
Setzt die ganzzahlige untere bzw. obere Grenze des Wertebereichs. |
setValue(value) | Setzt den aktuell darzustellenden Wert. Der Wert value muss ganzzahlig sein und in den angegebenen Grenzen liegen. |
value() | Gibt den momentan eingestellten Wert zurück. |
setOrientation(orientation) | Setzt die Orientierung des Sliders. Möglich sind die Werte QtCore.Qt.Horizontal und QtCore.Qt.Vertical für eine horizontale bzw. vertikale Ausrichtung. |
Signal | Beschreibung |
valueChanged() | Wird gesendet, wenn der eingestellte Wert des Sliders bzw. des Drehreglers verändert wurde. |
Tabelle 39.20 Wichtige Methoden und Signale von QSlider und QDial
39.5.11 QTextEdit 

Die Klasse QTextEdit repräsentiert ein mehrzeiliges Eingabefeld in der grafischen Benutzeroberfläche. In ein solches Eingabefeld kann der Benutzer beliebigen Text schreiben.
Methode | Beschreibung |
---|---|
setPlainText(text) | Setzt den Text des Eingabefeldes. |
toPlainText() | Gibt den Text des Eingabefeldes zurück. |
Signal | Beschreibung |
textChanged() | Wird gesendet, wenn der Text des Eingabefeldes verändert wurde. |
Tabelle 39.21 Wichtige Methoden und Signale von QTextEdit
39.5.12 QWidget 

Die Klasse QWidget ist die Basisklasse aller Steuerelemente und implementiert einen Großteil der steuerelementübergreifenden Funktionalität. Allgemein können Widgets in zwei Sorten unterteilt werden:
- Der häufigste Fall ist ein untergeordnetes Widget. Ein solches untergeordnetes Widget wird relativ zu seinem Eltern-Widget (engl. parent) positioniert und kann nicht über die Ränder des Parent-Widgets hinausragen.
- Ein Widget ohne Parent-Widget ist ein Fenster (engl. window). Theoretisch kann jede Instanz einer von QWidget abgeleiteten Klasse als Fenster dienen, beispielsweise also auch ein Button oder eine Checkbox. Praktisch ergibt dies jedoch wenig Sinn, und es werden nur geeignetere Klassen wie beispielsweise QDialog als Fenster verwendet.
Tabelle 39.22 listet die wichtigsten Eventhandler auf, die beim Auftreten verschiedener Events aufgerufen werden. Ein Eventhandler kann eingerichtet werden, indem eine selbst erstellte Klasse, die von QWidget direkt oder von einer Steuerelementklasse erbt, die genannte Methode implementiert.
Event | Beschreibung |
---|---|
paintEvent(event) | Wird aufgerufen, wenn das Widget neu gezeichnet werden muss. Die Methode bekommt eine QPaintEvent-Instanz übergeben. |
resizeEvent(event) | Wird aufgerufen, wenn das Widget in seiner Größe verändert wurde. Der Methode wird eine QResizeEvent-Instanz übergeben. |
mousePressEvent(event) | Wird aufgerufen, wenn der Benutzer mit der Maus auf das Widget klickt. Der Methode wird eine QMouseEvent-Instanz übergeben. |
mouseMoveEvent(event) | Wird aufgerufen, wenn der Benutzer die Maus bewegt, während er eine Maustaste gedrückt hält. Über die Methode setMouseTracking kann das Widget so eingestellt werden, dass die Methode auch gerufen wird, wenn der Benutzer die Maus bewegt, ohne eine Taste gedrückt zu halten. |
keyPressEvent(event) | Wird aufgerufen, wenn das Widget den Eingabefokus hat und der Benutzer eine Taste drückt. Wenn die Taste ausreichend lange gedrückt wird, wird die Methode keyPressEvent mehrfach aufgerufen. Es wird eine QKeyEvent-Instanz übergeben. |
Tabelle 39.22 Events eines Widgets