Auf dieser Seite

Objektmodell

Das Standard-C++-Objektmodell bietet eine sehr effiziente Laufzeitunterstützung für das Objektparadigma. Aufgrund seines statischen Charakters ist es jedoch in bestimmten Problembereichen zu unflexibel. Die Programmierung grafischer Benutzeroberflächen ist ein Bereich, der sowohl Laufzeiteffizienz als auch ein hohes Maß an Flexibilität erfordert. Qt bietet dies, indem es die Geschwindigkeit von C++ mit der Flexibilität des Qt-Objektmodells kombiniert.

Qt erweitert C++ um folgende Funktionen:

Viele dieser Qt-Funktionen sind mit Standard-C++-Techniken implementiert, die auf der Vererbung von QObject basieren. Andere, wie der Objektkommunikationsmechanismus und das dynamische Eigenschaftssystem, erfordern das Meta-Objekt-System, das von Qt’s eigenem „Meta-Object Compiler “ (moc) bereitgestellt wird.

Das Metaobjektsystem ist eine C++-Erweiterung, die die Sprache besser für die echte komponentenbasierte GUI-Programmierung geeignet macht.

Wichtige Klassen

Diese Klassen bilden die Grundlage des Qt-Objektmodells.

QMetaAssociation

Ermöglicht typunabhängigen Zugriff auf assoziative Container

QMetaClassInfo

Zusätzliche Informationen zu einer Klasse

QMetaContainer

Gemeinsame Funktionen für sequenzielle und assoziative Container

QMetaEnum

Metadaten zu einem Enumerator

QMetaMethod

Metadaten zu einer Mitgliedsfunktion

QMetaObject

Enthält Metainformationen über Qt-Objekte

QMetaProperty

Metadaten zu einer Eigenschaft

QMetaSequence

Ermöglicht typunabhängigen Zugriff auf sequenzielle Container

QMetaType

Verwaltet benannte Typen im Metaobjektsystem

QObject

Die Basisklasse aller Qt-Objekte

QObjectCleanupHandler

Überwacht die Lebensdauer mehrerer QObjects

QPointer

Template-Klasse, die geschützte Zeiger auf QObject bereitstellt

QSignalBlocker

Ausnahsesicherer Wrapper um QObject::blockSignals()

QSignalMapper

Bündelt Signale von identifizierbaren Absendern

QVariant

Fungiert wie eine Union für die gängigsten Qt-Datentypen

Qt-Objekte: Identität vs. Wert

Einige der oben aufgeführten neuen Funktionen des Qt-Objektmodells erfordern, dass wir Qt-Objekte als Identitäten und nicht als Werte betrachten. Werte werden kopiert oder zugewiesen; Identitäten werden geklont. Klonen bedeutet, eine neue Identität zu erstellen, nicht eine exakte Kopie der alten. Zum Beispiel haben Zwillinge unterschiedliche Identitäten. Sie sehen vielleicht identisch aus, haben aber unterschiedliche Namen, unterschiedliche Wohnorte und möglicherweise völlig unterschiedliche soziale Netzwerke.

Das Klonen einer Identität ist also ein komplexerer Vorgang als das Kopieren oder Zuweisen eines Werts. Was das im Qt-Objektmodell bedeutet, lässt sich anhand eines Beispiels verdeutlichen.

Ein Qt-Objekt...

  • kann eine eindeutige ` QObject::objectName()` haben. Wenn wir ein Qt-Objekt kopieren, welchen Namen sollten wir der Kopie geben?
  • hat eine Position in einer Objekthierarchie. Wenn wir ein Qt-Objekt kopieren, wo soll die Kopie dann platziert werden?
  • kann mit anderen Qt-Objekten verbunden werden, um Signale an diese zu senden oder von diesen gesendete Signale zu empfangen. Wenn wir ein Qt-Objekt kopieren, wie sollten wir diese Verbindungen auf die Kopie übertragen?
  • Es können ihm zur Laufzeit neue Eigenschaften hinzugefügt werden, die nicht in der C++-Klasse deklariert sind. Wenn wir ein Qt-Objekt kopieren, sollte die Kopie dann die Eigenschaften enthalten, die dem Original hinzugefügt wurden?

Aus diesen Gründen sollten Qt-Objekte als Identitäten und nicht als Werte behandelt werden. Identitäten werden geklont, nicht kopiert oder zugewiesen, und das Klonen einer Identität ist ein komplexerer Vorgang als das Kopieren oder Zuweisen eines Werts. Daher ist bei ` QObject ` und allen (direkten oder indirekten) Unterklassen von ` QObject ` die Eigenschaft ` copy constructor and assignment operator ` deaktiviert.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.