Auf dieser Seite

QObject Class

Die Klasse `QObject` ist die Basisklasse aller Qt-Objekte. Mehr...

Header: #include <QObject>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Vererbt an:
294 Typen

Q3DGraphsWidgetItem, Q3DObject, Q3DScene, Q3DTheme, QAbstract3DAxis, QAbstract3DInputHandler, QAbstract3DSeries, QAbstractAnimation, QAbstractAxis, QAbstractDataProxy, QAbstractEventDispatcher, QAbstractHttpServer, QAbstractItemDelegate, QAbstractItemModel, QAbstractItemModelTester, QAbstractNetworkCache, QAbstractOAuth, QAbstractOAuthReplyHandler, QAbstractObjectRegistryRef, QAbstractSeries, QAbstractState, QAbstractTextDocumentLayout, QAbstractTransition, QAccessibilityHints, QAccessiblePlugin, QAction, QActionGroup, QAmbientSound, QAudioBufferInput, QAudioBufferOutput, QAudioDecoder, QAudioEngine, QAudioInput, QAudioListener, QAudioOutput, QAudioRoom, QAudioSink, QAudioSource, QAxBaseObject, QAxFactory, QAxScript, QAxScriptManager, QBarModelMapper, QBarSet, QBluetoothDeviceDiscoveryAgent, QBluetoothLocalDevice, QBluetoothServer, QBluetoothServiceDiscoveryAgent, QBoxSet, QButtonGroup, QCamera, QCanBus, QCanBusDevice, QCandlestickModelMapper, QCandlestickSet, QChronoTimer, QClipboard, QCoapClient, QCompleter, QCoreApplication, QCustom3DItem, QDataWidgetMapper, QDBusAbstractAdaptor, QDBusAbstractInterface, QDBusPendingCallWatcher, QDBusServer, QDBusServiceWatcher, QDBusVirtualObject, QDesignerFormEditorInterface, QDesignerFormWindowManagerInterface, QDnsLookup, QDrag, QDtls, QDtlsClientVerifier, QEventLoop, QExtensionFactory, QExtensionManager, QFileSelector, QFileSystemWatcher, QFutureWatcher, QGenericPlugin, QGeoAreaMonitorSource, QGeoCodeReply, QGeoCodingManager, QGeoCodingManagerEngine, QGeoPositionInfoSource, QGeoRouteReply, QGeoRoutingManager, QGeoRoutingManagerEngine, QGeoSatelliteInfoSource, QGeoServiceProvider, QGesture, QGraphicsAnchor, QGraphicsEffect, QGraphicsItemAnimation, QGraphicsObject, QGraphicsScene, QGraphicsTransform, QGraphsTheme, QGrpcClientBase, QGrpcOperation, QGrpcOperationContext, QGStreamerVideoSource, QHelpEngineCore, QHelpFilterEngine, QHelpSearchEngine, QHelpSearchEngineCore, QHttpMultiPart, QIconEnginePlugin, QImageCapture, QImageIOPlugin, QInputDevice, QInputMethod, QIODevice, QItemSelectionModel, QJSEngine, QLayout, QLegendMarker, QLibrary, QLocalServer, QLowEnergyController, QLowEnergyService, QMaskGenerator, QMediaCaptureSession, QMediaDevices, QMediaPlayer, QMediaRecorder, QMimeData, QModbusDevice, QModbusReply, QMovie, QMqttClient, QMqttSubscription, QNearFieldManager, QNearFieldTarget, QNetworkAccessManager, QNetworkCookieJar, QNetworkInformation, QObjectCleanupHandler, QOffscreenSurface, QOpcUaClient, QOpcUaGdsClient, QOpcUaGenericStructHandler, QOpcUaHistoryReadResponse, QOpcUaKeyPair, QOpcUaNode, QOpcUaProvider, QOpenGLContext, QOpenGLContextGroup, QOpenGLDebugLogger, QOpenGLShader, QOpenGLShaderProgram, QOpenGLTimeMonitor, QOpenGLTimerQuery, QOpenGLVertexArrayObject, QPdfDocument, QPdfPageNavigator, QPdfPageRenderer, QPdfWriter, QPieModelMapper, QPieSlice, QPlaceManager, QPlaceManagerEngine, QPlaceReply, QPluginLoader, QQmlComponent, QQmlContext, QQmlEngineExtensionPlugin, QQmlExpression, QQmlExtensionPlugin, QQmlFileSelector, QQmlImageProviderBase, QQmlPropertyMap, QQuick3DObject, QQuickAttachedPropertyPropagator, QQuickImageResponse, QQuickItem, QQuickItemGrabResult, QQuickRenderControl, QQuickTextDocument, QQuickTextureFactory, QQuickWebEngineProfile, QRemoteObjectAbstractPersistedStore, QRemoteObjectNode, QRemoteObjectPendingCallWatcher, QRemoteObjectReplica, QRestAccessManager, QScreen, QScreenCapture, QScroller, QScxmlDataModel, QScxmlInvokableService, QScxmlInvokableServiceFactory, QScxmlStateMachine, QSensor, QSensorBackend, QSensorReading, QSessionManager, QSettings, QSGTexture, QSGTextureProvider, QSharedMemory, QShortcut, QSignalMapper, QSocketNotifier, QSoundEffect, QSpatialSound, QSqlDriver, QSqlDriverPlugin, QStyle, QStyleHints, QStylePlugin, QSvgRenderer, QSyntaxHighlighter, QSystemTrayIcon, Qt3DAnimation::QAbstractAnimation, Qt3DAnimation::QAnimationController, Qt3DAnimation::QAnimationGroup, Qt3DAnimation::QMorphTarget, Qt3DCore::QAbstractAspect, Qt3DCore::QAspectEngine, Qt3DCore::QNode, Qt3DCore::Quick::QQmlAspectEngine, Qt3DInput::QKeyEvent, Qt3DInput::QMouseEvent, Qt3DInput::QWheelEvent, Qt3DRender::QGraphicsApiFilter, Qt3DRender::QPickEvent, Qt3DRender::QRenderCapabilities, Qt3DRender::QRenderCaptureReply, Qt3DRender::QStencilOperationArguments, Qt3DRender::QStencilTestArguments, Qt3DRender::QTextureWrapMode, QTcpServer, QTextDocument, QTextObject, QTextToSpeech, QThread, QThreadPool, QTimeLine, QTimer, QTranslator, QtTaskTree::QBarrier, QtTaskTree::QNetworkReplyWrapper, QtTaskTree::QTaskInterface, QtTaskTree::QTaskTree, QtTaskTree::QTcpSocketWrapper, QUiLoader, QUndoGroup, QUndoStack, QValidator, QValue3DAxisFormatter, QVideoFrameInput, QVideoSink, QVirtualKeyboardAbstractInputMethod, QVirtualKeyboardDictionary, QVirtualKeyboardDictionaryManager, QVirtualKeyboardInputContext, QVirtualKeyboardInputEngine, QVirtualKeyboardObserver, QVirtualKeyboardTrace, QWaylandClient, QWaylandClientExtension, QWaylandObject, QWaylandQuickShellIntegration, QWaylandSurfaceGrabber, QWaylandView, QWaylandXdgOutputV1, QWaylandXdgPopup, QWaylandXdgToplevel, QWebChannel, QWebChannelAbstractTransport, QWebEngineClientHints, QWebEngineContextMenuRequest, QWebEngineCookieStore, QWebEngineDownloadRequest, QWebEngineExtensionManager, QWebEngineHistory, QWebEngineNavigationRequest, QWebEngineNewWindowRequest, QWebEngineNotification, QWebEnginePage, QWebEngineProfile, QWebEngineUrlRequestInterceptor, QWebEngineUrlRequestJob, QWebEngineUrlSchemeHandler, QWebEngineWebAuthUxRequest, QWebSocket, QWebSocketServer, QWidget, QWindow, QWindowCapture, QWinEventNotifier und QXYModelMapper

Hinweis: Alle Funktionen dieser Klasse sind reentrant.

Hinweis: Diese Funktionen sind zudem threadsicher:

  • connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
  • connect(const QObject *sender, const char *signal, const char *method, Qt::ConnectionType type) const
  • connect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type)
  • connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
  • connect(const QObject *sender, PointerToMemberFunction signal, const QObject *context, Functor functor, Qt::ConnectionType type)
  • disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)
  • disconnect(const char *signal, const QObject *receiver, const char *method) const
  • disconnect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method)
  • deleteLater()

Eigenschaften

Öffentliche Funktionen

QObject(QObject *parent = nullptr)
virtual ~QObject()
QBindable<QString> bindableObjectName()
bool blockSignals(bool block)
const QObjectList &children() const
QMetaObject::Connection connect(const QObject *sender, const char *signal, const char *method, Qt::ConnectionType type = Qt::AutoConnection) const
bool disconnect(const QObject *receiver, const char *method = nullptr) const
bool disconnect(const char *signal = nullptr, const QObject *receiver = nullptr, const char *method = nullptr) const
void dumpObjectInfo() const
void dumpObjectTree() const
QList<QByteArray> dynamicPropertyNames() const
virtual bool event(QEvent *e)
virtual bool eventFilter(QObject *watched, QEvent *event)
T findChild(QAnyStringView name, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const
(since 6.7) T findChild(Qt::FindChildOptions options = Qt::FindChildrenRecursively) const
QList<T> findChildren(QAnyStringView name, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const
(since 6.3) QList<T> findChildren(Qt::FindChildOptions options = Qt::FindChildrenRecursively) const
QList<T> findChildren(const QRegularExpression &re, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const
bool inherits(const char *className) const
void installEventFilter(QObject *filterObj)
(since 6.11) bool isQmlExposed() const
(since 6.4) bool isQuickItemType() const
bool isWidgetType() const
bool isWindowType() const
void killTimer(int id)
(since 6.8) void killTimer(Qt::TimerId id)
virtual const QMetaObject *metaObject() const
bool moveToThread(QThread *targetThread)
QString objectName() const
QObject *parent() const
QVariant property(const char *name) const
void removeEventFilter(QObject *obj)
void setObjectName(const QString &name)
(since 6.4) void setObjectName(QAnyStringView name)
void setParent(QObject *parent)
bool setProperty(const char *name, const QVariant &value)
(since 6.6) bool setProperty(const char *name, QVariant &&value)
bool signalsBlocked() const
int startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer)
int startTimer(std::chrono::nanoseconds interval, Qt::TimerType timerType = Qt::CoarseTimer)
QThread *thread() const

Öffentliche Slots

void deleteLater()

Signale

void destroyed(QObject *obj = nullptr)
void objectNameChanged(const QString &objectName)

Statische öffentliche Mitglieder

QMetaObject::Connection connect(const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, const QObject *context, Functor functor, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection)
(since 6.12) bool disconnect(QMetaObject::Connection &connection)
(since 6.12) bool disconnect(QMetaObject::Connection &&connection)
bool disconnect(const QMetaObject::Connection &connection)
bool disconnect(const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method)
bool disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)
bool disconnect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method)
const QMetaObject staticMetaObject
QString tr(const char *sourceText, const char *disambiguation = nullptr, int n = -1)

Geschützte Funktionen

virtual void childEvent(QChildEvent *event)
virtual void connectNotify(const QMetaMethod &signal)
virtual void customEvent(QEvent *event)
virtual void disconnectNotify(const QMetaMethod &signal)
bool isSignalConnected(const QMetaMethod &signal) const
int receivers(const char *signal) const
QObject *sender() const
int senderSignalIndex() const
virtual void timerEvent(QTimerEvent *event)
QObjectList
(since 6.8) enum class TimerId { Invalid }
T qobject_cast(QObject *object)
T qobject_cast(const QObject *object)

Makros

Ausführliche Beschreibung

QObject ist das Herzstück des Qt-Objektmodells. Das zentrale Merkmal dieses Modells ist ein sehr leistungsfähiger Mechanismus für die nahtlose Objektkommunikation, der als Signale und Slots bezeichnet wird. Sie können ein Signal mit ` connect()` an einen Slot anschließen und die Verbindung mit ` disconnect()` aufheben. Um endlose Benachrichtigungsschleifen zu vermeiden, können Sie Signale vorübergehend mit ` blockSignals()` blockieren. Die geschützten Funktionen ` connectNotify()` und ` disconnectNotify()` ermöglichen es, Verbindungen nachzuverfolgen.

QObjects organisieren sich in Objektbäumen. Wenn Sie ein QObject mit einem anderen Objekt als Elternobjekt erstellen, fügt sich das Objekt automatisch in die Liste „ children()“ des Elternobjekts ein. Das übergeordnete Objekt übernimmt die Verantwortung für das Objekt, d. h., es löscht seine untergeordneten Objekte automatisch in seinem Destruktor. Mit den Methoden ` findChild()` oder ` findChildren()` können Sie ein Objekt anhand seines Namens und optional anhand seines Typs suchen.

Jedes Objekt verfügt über eine ` objectName()`-Methode, und sein Klassenname lässt sich über die entsprechende ` metaObject()`-Methode ermitteln (siehe ` QMetaObject::className()`). Mit der Funktion ` inherits()` können Sie feststellen, ob die Klasse des Objekts von einer anderen Klasse in der QObject-Vererbungshierarchie erbt.

Wenn ein Objekt gelöscht wird, sendet es ein Signal „ destroyed()“ aus. Sie können dieses Signal abfangen, um hängende Verweise auf QObjects zu vermeiden.

QObjects können Ereignisse über ` event()` empfangen und die Ereignisse anderer Objekte filtern. Weitere Informationen finden Sie unter ` installEventFilter()` und ` eventFilter()`. Ein Komfort-Handler, ` childEvent()`, kann neu implementiert werden, um untergeordnete Ereignisse abzufangen.

Nicht zuletzt bietet QObject die grundlegende Timer-Unterstützung in Qt; siehe QChronoTimer für eine übergreifende Unterstützung von Timern.

Beachten Sie, dass das Makro ` Q_OBJECT ` für jedes Objekt obligatorisch ist, das Signale, Slots oder Eigenschaften implementiert. Außerdem müssen Sie den Meta-Object Compiler auf die Quelldatei anwenden. Wir empfehlen dringend die Verwendung dieses Makros in allen Unterklassen von QObject, unabhängig davon, ob sie tatsächlich Signale, Slots und Eigenschaften verwenden oder nicht, da es andernfalls zu seltsamem Verhalten bestimmter Funktionen kommen kann.

QWidget Alle Qt-Widgets erben von QObject. Die Hilfsfunktion ` isWidgetType()` gibt zurück, ob ein Objekt tatsächlich ein Widget ist. Sie ist wesentlich schneller als ` qobject_cast<XML-ph-0002@deepl.internal*>(obj)` oder ` obj->inherits("QWidget")`.

Einige QObject-Funktionen, z. B. ` children()`, geben ein ` QObjectList` zurück. ` QObjectList ` ist ein `typedef` für ` QList<QObject *>`.

Thread-Affinität

Eine QObject-Instanz hat eine sogenannte Thread-Affinität, d. h., sie befindet sich in einem bestimmten Thread. Wenn ein QObject ein „ queued signal “ oder ein gepostetes Ereignis empfängt, wird der Slot oder der Ereignis-Handler in dem Thread ausgeführt, in dem sich das Objekt befindet.

Hinweis: Wenn ein QObject keine Thread-Affinität besitzt (d. h., wenn ` thread()` Null zurückgibt) oder wenn es in einem Thread angesiedelt ist, in dem keine Ereignisschleife läuft, kann es keine in der Warteschlange befindlichen Signale oder gepostete Ereignisse empfangen.

Standardmäßig befindet sich ein QObject in dem Thread, in dem es erstellt wurde. Die Thread-Affinität eines Objekts kann mit ` thread()` abgefragt und mit ` moveToThread()` geändert werden.

Alle QObjects müssen sich im selben Thread wie ihr übergeordnetes Objekt befinden. Folglich:

  • setParent() schlägt fehl, wenn sich die beiden beteiligten QObjects in unterschiedlichen Threads befinden.
  • Wenn ein QObject in einen anderen Thread verschoben wird, werden alle seine untergeordneten Objekte automatisch mitverschoben.
  • moveToThread() schlägt fehl, wenn das QObject ein übergeordnetes Objekt hat.
  • Werden QObjects innerhalb von ` QThread::run()` erstellt, können sie keine Kinder des Objekts ` QThread ` werden, da sich ` QThread ` nicht in dem Thread befindet, der ` QThread::run()` aufruft.

Hinweis: Die Membervariableneines QObjects werden nicht automatisch zu dessen untergeordneten Objekten. Die Eltern-Kind-Beziehung muss entweder durch die Übergabe eines Zeigers auf die ` constructor` des untergeordneten Objekts oder durch den Aufruf von ` setParent()` hergestellt werden. Ohne diesen Schritt verbleiben die Membervariablen des Objekts im alten Thread, wenn ` moveToThread()` aufgerufen wird.

Kein Kopierkonstruktor und kein Zuweisungsoperator

QObject verfügt weder über einen Kopierkonstruktor noch über einen Zuweisungsoperator. Dies ist beabsichtigt. Tatsächlich sind sie zwar deklariert, jedoch in einem ` private `-Abschnitt mit dem Makro ` Q_DISABLE_COPY()`. Tatsächlich verwenden alle (direkt oder indirekt) von `QObject` abgeleiteten Qt-Klassen dieses Makro, um ihren Kopierkonstruktor und ihren Zuweisungsoperator als privat zu deklarieren. Die Begründung dafür findet sich in der Erörterung zu „Identität vs. Wert“ auf der Seite zum Qt-Objektmodell.

Die wichtigste Konsequenz daraus ist, dass Sie Zeiger auf QObject (oder auf Ihre QObject-Unterklasse) verwenden sollten, wo Sie sonst vielleicht versucht wären, Ihre QObject-Unterklasse als Wert zu verwenden. Ohne Kopierkonstruktor können Sie beispielsweise eine Unterklasse von QObject nicht als Wert verwenden, der in einer der Containerklassen gespeichert werden soll. Sie müssen Zeiger speichern.

Automatische Verbindung

Das Metaobjektsystem von Qt bietet einen Mechanismus zur automatischen Verknüpfung von Signalen und Slots zwischen QObject-Unterklassen und deren untergeordneten Objekten. Solange Objekte mit geeigneten Objektnamen definiert sind und Slots einer einfachen Namenskonvention folgen, kann diese Verknüpfung zur Laufzeit durch die Funktion ` QMetaObject::connectSlotsByName()` hergestellt werden.

uic generiert Code, der diese Funktion aufruft, um die automatische Verknüpfung zwischen Widgets auf Formularen zu ermöglichen, die mit dem „Qt Widgets Designer“ erstellt wurden. Weitere Informationen zur Verwendung der automatischen Verknüpfung mit dem „Qt Widgets Designer“ finden Sie im Abschnitt „Verwendung einer UI-Datei des „ Qt Widgets Designer“ in Ihrer Anwendung “ im Handbuch zum „Qt Widgets Designer “.

Dynamische Eigenschaften

Dynamische Eigenschaften können zu QObject-Instanzen zur Laufzeit hinzugefügt und von diesen entfernt werden. Dynamische Eigenschaften müssen nicht zur Kompilierungszeit deklariert werden, bieten jedoch dieselben Vorteile wie statische Eigenschaften und werden über dieselbe API manipuliert – mit ` property()` zum Lesen und ` setProperty()` zum Schreiben.

Dynamische Eigenschaften werden von Qt Widgets Designer unterstützt, und sowohl Standard-Qt-Widgets als auch benutzerdefinierte Formulare können mit dynamischen Eigenschaften versehen werden.

Internationalisierung (I18n)

Alle QObject-Unterklassen unterstützen die Übersetzungsfunktionen von Qt, wodurch es möglich ist, die Benutzeroberfläche einer Anwendung in verschiedene Sprachen zu übersetzen.

Damit für den Benutzer sichtbarer Text übersetzbar ist, muss er in Aufrufe der Funktion ` tr()` eingeschlossen werden. Dies wird im Dokument „Quellcode für die Übersetzung schreiben“ ausführlich erläutert.

Siehe auch „ QMetaObject“ , „ QPointer “, „ QObjectCleanupHandler “, „ Q_DISABLE_COPY()“ und „Objektbäume und Eigentumsverhältnisse“.

Dokumentation zu Eigenschaften

[bindable] objectName : QString

Hinweis: Diese Eigenschaft unterstützt „ QProperty “-Bindungen.

Diese Eigenschaft enthält den Namen dieses Objekts

Mit „ findChild()“ können Sie ein Objekt anhand seines Namens (und Typs) finden. Mit „ findChildren()“ können Sie eine Gruppe von Objekten finden.

qDebug("MyClass::setPrecision(): (%s) ungültige Genauigkeit %f",
       qPrintable(objectName()), newPrecision);

Standardmäßig enthält diese Eigenschaft eine leere Zeichenkette.

Zugriffsfunktionen:

QString objectName() const
void setObjectName(const QString &name)
void setObjectName(QAnyStringView name)

Notifier-Signal:

void objectNameChanged(const QString &objectName)[see note below]

Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, kann jedoch nicht vom Benutzer ausgelöst werden.

Siehe auch metaObject() und QMetaObject::className().

Dokumentation zu den Mitgliedsfunktionen

[explicit invokable] QObject::QObject(QObject *parent = nullptr)

Erstellt ein Objekt mit dem übergeordneten Objekt „ parent “.

Das übergeordnete Objekt eines Objekts kann als dessen Eigentümer betrachtet werden. Beispielsweise ist ein „ dialog box “ das übergeordnete Objekt der darin enthaltenen Schaltflächen „ OK “ und „ Cancel “.

Der Destruktor eines übergeordneten Objekts löscht alle untergeordneten Objekte.

Wird parent auf nullptr gesetzt, wird ein Objekt ohne übergeordnetes Objekt erstellt. Handelt es sich bei dem Objekt um ein Widget, wird es zu einem Fenster der obersten Ebene.

Hinweis: Diese Funktion kann über das Metaobjektsystem und aus QML aufgerufen werden. Siehe „ Q_INVOKABLE “.

Siehe auch parent(), findChild() und findChildren().

[virtual noexcept] QObject::~QObject()

Löscht das Objekt und entfernt dabei alle seine untergeordneten Objekte.

Alle Signale zum und vom Objekt werden automatisch getrennt, und alle ausstehenden, für das Objekt gesendeten Ereignisse werden aus der Ereigniswarteschlange entfernt. Es ist jedoch oft sicherer, ` deleteLater()` zu verwenden, anstatt eine Unterklasse von ` QObject ` direkt zu löschen.

Warnung: Alle untergeordneten Objekte werden gelöscht. Befinden sich einige dieser Objekte auf dem Stack oder sind global definiert, wird Ihr Programm früher oder später abstürzen. Wir raten davon ab, außerhalb des übergeordneten Objekts Zeiger auf untergeordnete Objekte zu halten. Sollten Sie dies dennoch tun, bietet Ihnen das Signal ` destroyed()` die Möglichkeit, zu erkennen, wann ein Objekt zerstört wird.

QObject Warnung: Das Löschen eines „ QObject “, während es gerade ein an es übermitteltes Ereignis verarbeitet, kann zu einem Absturz führen. Sie dürfen den „ “ nicht direkt löschen, wenn er in einem anderen Thread existiert als dem, der gerade ausgeführt wird. Verwenden Sie stattdessen „ deleteLater()“, wodurch die Ereignisschleife das Objekt löscht, nachdem alle ausstehenden Ereignisse an es übermittelt wurden.

Siehe auch deleteLater().

[noexcept] bool QObject::blockSignals(bool block)

Ist „ block “ wahr, werden die von diesem Objekt ausgesendeten Signale blockiert (d. h., das Aussenden eines Signals löst keine damit verbundenen Aktionen aus). Ist „ block “ falsch, findet keine solche Blockierung statt.

Der Rückgabewert ist der vorherige Wert von ` signalsBlocked()`.

Beachten Sie, dass das Signal „ destroyed()“ auch dann ausgesendet wird, wenn die Signale dieses Objekts blockiert wurden.

Signale, die während der Blockierung ausgesendet werden, werden nicht gepuffert.

Siehe auch signalsBlocked() und QSignalBlocker.

[virtual protected] void QObject::childEvent(QChildEvent *event)

Dieser Ereignis-Handler kann in einer Unterklasse neu implementiert werden, um Ereignisse von untergeordneten Elementen zu empfangen. Das Ereignis wird über den Parameter „ event “ übergeben.

QEvent::ChildAdded Die Ereignisse „ QEvent::ChildRemoved “ und „ “ werden an Objekte gesendet, wenn untergeordnete Elemente hinzugefügt oder entfernt werden. In beiden Fällen können Sie sich nur darauf verlassen, dass das untergeordnete Element ein „ QObject “ ist oder – falls „ isWidgetType()“ den Wert „ true “ zurückgibt – ein „ QWidget “. (Dies liegt daran, dass im Fall von „ ChildAdded “ das untergeordnete Element noch nicht vollständig konstruiert ist und im Fall von „ ChildRemoved “ möglicherweise bereits zerstört wurde.)

QEvent::ChildPolished Ereignisse werden an Widgets gesendet, wenn untergeordnete Elemente „polished“ sind oder wenn „polished“ untergeordnete Elemente hinzugefügt werden. Wenn Sie ein „child polished“-Ereignis erhalten, ist die Erstellung des untergeordneten Elements in der Regel abgeschlossen. Dies ist jedoch nicht garantiert, und während der Ausführung des Konstruktors eines Widgets können mehrere „polished“-Ereignisse übermittelt werden.

Für jedes untergeordnete Widget erhalten Sie ein „ ChildAdded “-Ereignis, null oder mehrere „ ChildPolished “-Ereignisse und ein „ ChildRemoved “-Ereignis.

Das Ereignis „ ChildPolished “ wird ausgelassen, wenn ein untergeordnetes Widget unmittelbar nach dem Hinzufügen wieder entfernt wird. Wird ein untergeordnetes Widget während des Aufbaus und der Zerstörung mehrmals poliert, können Sie mehrere „child polished“-Ereignisse für dasselbe untergeordnete Widget erhalten, jedes Mal mit einer anderen virtuellen Tabelle.

Siehe auch „ event()“.

const QObjectList &QObject::children() const

Gibt eine Liste von untergeordneten Objekten zurück. Die Klasse „ QObjectList “ ist in der Header-Datei „ <QObject> “ wie folgt definiert:

Das zuerst hinzugefügte untergeordnete Objekt ist das „ first “-Objekt in der Liste, und das zuletzt hinzugefügte untergeordnete Objekt ist das „ last “-Objekt in der Liste, d. h., neue untergeordnete Objekte werden am Ende angehängt.

Beachten Sie, dass sich die Reihenfolge in der Liste ändert, wenn die „ QWidget “-Unterelemente „ raised “ oder „ lowered “ sind. Ein Widget, das angehoben wird, wird zum letzten Objekt in der Liste, und ein Widget, das abgesenkt wird, wird zum ersten Objekt in der Liste.

Siehe auch findChild(), findChildren(), parent() und setParent().

[static] QMetaObject::Connection QObject::connect(const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type = Qt::AutoConnection)

Erstellt eine Verbindung des angegebenen „ type “ vom „ signal “ im „ sender “-Objekt zum „ method “ im „ receiver “-Objekt. Gibt ein Handle für die Verbindung zurück, mit dem diese später getrennt werden kann.

Das Verbindungs-Handle ist ungültig, wenn die Verbindung nicht hergestellt werden kann, beispielsweise weil die Parameter ungültig waren. Sie können überprüfen, ob „ QMetaObject::Connection “ gültig ist, indem Sie den Wert in einen bool-Wert umwandeln.

Diese Funktion arbeitet genauso wie ` connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type) `, verwendet jedoch ` QMetaMethod `, um Signal und Methode anzugeben.

Siehe auch ` connect` (const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type).

[static] QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)

Stellt eine Verbindung zwischen dem angegebenen „ type “ aus dem „ signal “ im „ sender “-Objekt und dem „ method “ im „ receiver “-Objekt her. Gibt ein Handle für die Verbindung zurück, mit dem diese später getrennt werden kann.

Bei der Angabe von „ signal “ und „ method “ müssen Sie die Makros „ SIGNAL() “ und „ SLOT() “ verwenden, zum Beispiel:

QLabel *label = new QLabel;
QScrollBar *scrollBar = new QScrollBar;
QObject::connect(scrollBar, SIGNAL(valueChanged(int)),
                 label,  SLOT(setNum(int)));

Dieses Beispiel stellt sicher, dass das Label stets den aktuellen Wert der Bildlaufleiste anzeigt. Beachten Sie, dass die Parameter für Signale und Slots keine Variablennamen enthalten dürfen, sondern nur den Typ. Folgendes würde beispielsweise nicht funktionieren und „false“ zurückgeben:

// WRONG
QObject::connect(scrollBar, SIGNAL(valueChanged(int value)),
                 label, SLOT(setNum(int value)));

Ein Signal kann auch mit einem anderen Signal verbunden werden:

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    MyWidget();

signals:
    void buttonClicked();

private:
    QPushButton *myButton;
};

MyWidget::MyWidget()
{
    myButton = new QPushButton(this);
    connect(myButton, SIGNAL(clicked()),
            this, SIGNAL(buttonClicked()));
}

In diesem Beispiel leitet der Konstruktor „ MyWidget “ ein Signal von einer privaten Member-Variablen weiter und stellt es unter einem Namen bereit, der sich auf „ MyWidget “ bezieht.

Ein Signal kann mit vielen Slots und Signalen verbunden werden. Ein Slot kann mit vielen Signalen verbunden werden.

Wenn ein Signal mit mehreren Slots verbunden ist, werden die Slots bei der Aussendung des Signals in derselben Reihenfolge aktiviert, in der die Verbindungen hergestellt wurden.

Die Funktion gibt ein ` QMetaObject::Connection ` zurück, das ein Handle für eine Verbindung darstellt, sofern das Signal erfolgreich mit dem Slot verbunden wurde. Das Verbindungs-Handle ist ungültig, wenn die Verbindung nicht hergestellt werden kann, beispielsweise wenn ` QObject ` die Existenz von ` signal ` oder ` method` nicht überprüfen kann oder wenn deren Signaturen nicht kompatibel sind. Du kannst überprüfen, ob das Handle gültig ist, indem du es in einen `bool` umwandelst.

Standardmäßig wird für jede von Ihnen hergestellte Verbindung ein Signal ausgegeben; bei doppelten Verbindungen werden zwei Signale ausgegeben. Sie können alle diese Verbindungen mit einem einzigen Aufruf von ` disconnect()` trennen. Wenn Sie den Parameter ` Qt::UniqueConnection ` type übergeben, wird die Verbindung nur hergestellt, wenn es sich nicht um ein Duplikat handelt. Wenn bereits ein Duplikat vorhanden ist (genau dasselbe Signal an genau denselben Slot bei denselben Objekten), schlägt die Verbindung fehl und `connect` gibt ein ungültiges ` QMetaObject::Connection` zurück.

Hinweis: Qt ::UniqueConnections funktionieren nicht für Lambdas, Nicht-Member-Funktionen und Funktoren; sie gelten nur für die Verbindung zu Member-Funktionen.

Der optionale Parameter „ type “ beschreibt die Art der herzustellenden Verbindung. Insbesondere legt er fest, ob ein bestimmtes Signal sofort an einen Slot übermittelt oder zur späteren Übermittlung in die Warteschlange gestellt wird. Wird das Signal in die Warteschlange gestellt, müssen die Parameter von Typen sein, die dem Metobjektsystem von Qt bekannt sind, da Qt die Argumente kopieren muss, um sie im Hintergrund in einem Ereignis zu speichern. Wenn Sie versuchen, eine Verbindung mit Warteschlange zu verwenden, und die Fehlermeldung

QObject::connect: Cannot queue arguments of type 'MyType'
(Make sure 'MyType' is registered using qRegisterMetaType().)

, rufen Sie ` qRegisterMetaType()` auf, um den Datentyp zu registrieren, bevor Sie die Verbindung herstellen.

Hinweis: Diese Funktion ist threadsicher.

Siehe auch disconnect(), sender(), qRegisterMetaType(), Q_DECLARE_METATYPE() sowie Unterschiede zwischen stringbasierten und funktorbasierten Verbindungen.

[static] template <typename PointerToMemberFunction, typename Functor> QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)

Erstellt eine Verbindung von signal im Objekt sender zu functor und gibt ein Handle für die Verbindung zurück

Das Signal muss eine Funktion sein, die im Header als Signal deklariert ist. Die Slot-Funktion kann eine beliebige Funktion oder ein beliebiger Funktor sein, der mit dem Signal verbunden werden kann. Eine Slot-Funktion kann mit einem bestimmten Signal verbunden werden, wenn das Signal mindestens so viele Argumente hat wie die Slot-Funktion. Es muss eine implizite Konvertierung zwischen den Typen der entsprechenden Argumente im Signal und im Slot vorhanden sein.

Beispiel:

void someFunction();
//...
void someOtherFunction()
{
    QPushButton *button = new QPushButton;
    QObject::connect(button, &QPushButton::clicked, someFunction);
}

Es können auch Lambda-Ausdrücke verwendet werden:

    QByteArray page = "...";
    QTcpSocket *socket = new QTcpSocket;
    socket->connectToHost("qt-project.org", 80);
    QObject::connect(socket, &QTcpSocket::connected, [=] () {
            socket->write("GET " + page + "\r\n");
        });

Die Verbindung wird automatisch getrennt, wenn der Sender zerstört wird. Sie sollten jedoch darauf achten, dass alle innerhalb des Funktors verwendeten Objekte noch vorhanden sind, wenn das Signal ausgelöst wird.

Aus diesem Grund wird empfohlen, die Überladung von `connect()` zu verwenden, die zusätzlich einen ` QObject ` als Empfänger/Kontext akzeptiert. Die Verwendung der kontextlosen Überladung lässt sich durch die Definition des Makros ` QT_NO_CONTEXTLESS_CONNECT ` deaktivieren.

Überladene Funktionen können mithilfe von ` qOverload` aufgelöst werden.

Diese Funktion überlädt ` QObject::connect()`.

Hinweis: Diese Funktion ist threadsicher.

QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const char *method, Qt::ConnectionType type = Qt::AutoConnection) const

Stellt eine Verbindung zwischen „ signal “ des Objekts „ sender “ und „ method “ dieses Objekts her.

Entspricht connect(sender, signal, this, method, type).

Jede von Ihnen hergestellte Verbindung sendet ein Signal aus, sodass doppelte Verbindungen zwei Signale ausgeben. Sie können eine Verbindung mit ` disconnect()` trennen.

Diese Funktion überlädt QObject::connect().

Hinweis: Diese Funktion ist threadsicher.

Siehe auch disconnect().

[static] template <typename PointerToMemberFunction, typename Functor> QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal, const QObject *context, Functor functor, Qt::ConnectionType type = Qt::AutoConnection)

Erstellt eine Verbindung zwischen einem angegebenen ` type ` aus ` signal ` im Objekt ` sender ` und ` functor `, die in eine bestimmte Ereignisschleife von ` context` eingefügt werden soll, und gibt ein Handle für die Verbindung zurück.

Hinweis: Qt ::UniqueConnections funktionieren nicht für Lambdas, Nicht-Member-Funktionen und Funktoren; sie gelten nur für die Verbindung mit Member-Funktionen.

Das Signal muss eine Funktion sein, die im Header als Signal deklariert wurde. Die Slot-Funktion kann eine beliebige Funktion oder ein beliebiger Funktor sein, der mit dem Signal verbunden werden kann. Eine Slot-Funktion kann mit einem bestimmten Signal verbunden werden, wenn das Signal mindestens so viele Argumente hat wie die Slot-Funktion. Es muss eine implizite Konvertierung zwischen den Typen der entsprechenden Argumente im Signal und im Slot geben.

Beispiel:

void someFunction();
//...
void someOtherFunction()
{
    QPushButton *button = new QPushButton;
    QObject::connect(button, &QPushButton::clicked, this, someFunction, Qt::QueuedConnection);
}

Lambda-Ausdrücke können ebenfalls verwendet werden:

QByteArray page = "...";
QTcpSocket *socket = new QTcpSocket;
socket->connectToHost("qt-project.org", 80);
QObject::connect(socket, &QTcpSocket::connected, this, [=] () {
        socket->write("GET " + page + "\r\n");
    }, Qt::AutoConnection);

Die Verbindung wird automatisch getrennt, wenn der Absender oder der Kontext zerstört wird. Sie sollten jedoch darauf achten, dass alle innerhalb des Funktors verwendeten Objekte noch vorhanden sind, wenn das Signal ausgelöst wird.

Überladene Funktionen können mithilfe von ` qOverload` aufgelöst werden.

Diese Funktion überlädt ` QObject::connect()`.

Hinweis: Diese Funktion ist threadsicher.

[static] template <typename PointerToMemberFunction> QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection)

Erstellt eine Verbindung des angegebenen „ type “ vom „ signal “ im „ sender “-Objekt zum „ method “ im „ receiver “-Objekt. Gibt ein Handle für die Verbindung zurück, mit dem diese später getrennt werden kann.

Das Signal muss eine Funktion sein, die im Header als Signal deklariert ist. Die Slot-Funktion kann jede Member-Funktion sein, die mit dem Signal verbunden werden kann. Ein Slot kann mit einem bestimmten Signal verbunden werden, wenn das Signal mindestens so viele Argumente hat wie der Slot und eine implizite Konvertierung zwischen den Typen der entsprechenden Argumente im Signal und im Slot besteht.

Beispiel:

QLabel *label = new QLabel;
QLineEdit *lineEdit = new QLineEdit;
QObject::connect(lineEdit, &QLineEdit::textChanged,
                label,  &QLabel::setText);

Dieses Beispiel stellt sicher, dass das Label immer den aktuellen Text des Zeilenbearbeitungsfelds anzeigt.

Ein Signal kann mit vielen Slots und Signalen verbunden werden. Ein Slot kann mit vielen Signalen verbunden werden.

Wenn ein Signal mit mehreren Slots verbunden ist, werden die Slots in derselben Reihenfolge aktiviert, in der die Verbindung hergestellt wurde, sobald das Signal ausgesendet wird

Die Funktion gibt ein Handle für eine Verbindung zurück, wenn sie das Signal erfolgreich mit dem Slot verbindet. Das Verbindungs-Handle ist ungültig, wenn die Verbindung nicht hergestellt werden kann, beispielsweise wenn ` QObject ` die Existenz von ` signal ` nicht überprüfen kann (falls dieses nicht als Signal deklariert wurde). Sie können überprüfen, ob das ` QMetaObject::Connection ` gültig ist, indem Sie es in einen `bool` umwandeln.

Standardmäßig wird für jede von Ihnen hergestellte Verbindung ein Signal ausgegeben; bei doppelten Verbindungen werden zwei Signale ausgegeben. Sie können alle diese Verbindungen mit einem einzigen Aufruf von ` disconnect()` trennen. Wenn Sie den Parameter ` Qt::UniqueConnection ` ` type` übergeben, wird die Verbindung nur hergestellt, wenn es sich nicht um ein Duplikat handelt. Wenn bereits ein Duplikat vorhanden ist (genau dasselbe Signal an genau denselben Slot bei denselben Objekten), schlägt die Verbindung fehl und `connect` gibt ein ungültiges ` QMetaObject::Connection` zurück.

Der optionale Parameter „ type “ beschreibt die Art der herzustellenden Verbindung. Insbesondere bestimmt er, ob ein bestimmtes Signal sofort an einen Slot übermittelt oder zur späteren Übermittlung in die Warteschlange gestellt wird. Wird das Signal in die Warteschlange gestellt, müssen die Parameter Typen aufweisen, die dem Metaobjektsystem von Qt bekannt sind, da Qt die Argumente kopieren muss, um sie im Hintergrund in einem Ereignis zu speichern. Wenn Sie versuchen, eine Verbindung mit Warteschlange zu verwenden, und die Fehlermeldung

QObject::connect: Cannot queue arguments of type 'MyType'
(Make sure 'MyType' is registered using qRegisterMetaType().)

stellen Sie sicher, dass Sie den Argumenttyp mit Q_DECLARE_METATYPE

Überladene Funktionen können mithilfe von qOverload aufgelöst werden.

Diese Funktion überlädt „ QObject::connect()“.

Hinweis: Diese Funktion ist threadsicher.

Siehe auch Unterschiede zwischen stringbasierten und funktorbasierten Verbindungen.

[virtual protected] void QObject::connectNotify(const QMetaMethod &signal)

Diese virtuelle Funktion wird aufgerufen, wenn etwas an „ signal “ in diesem Objekt angeschlossen wurde.

Wenn Sie „ signal “ mit einem bestimmten Signal vergleichen möchten, können Sie „ QMetaMethod::fromSignal()“ wie folgt verwenden:

    if (signal == QMetaMethod::fromSignal(&MyObject::valueChanged)) {
        // signal is valueChanged
    }

Warnung: Diese Funktion verstößt gegen das objektorientierte Prinzip der Modularität. Sie kann jedoch nützlich sein, wenn Sie eine rechenintensive Operation nur dann ausführen müssen, wenn etwas an ein Signal angeschlossen ist.

Warnung: Diese Funktion wird von dem Thread aufgerufen, der die Verbindung herstellt; dies kann ein anderer Thread sein als der, in dem dieses Objekt ausgeführt wird. Diese Funktion kann auch aufgerufen werden, während ein interner Mutex von ` QObject ` gesperrt ist. Es ist daher nicht zulässig, aus Ihrer Neuimplementierung heraus erneut in ` QObject `-Funktionen einzusteigen, einschließlich ` isSignalConnected()`. Wenn Sie in Ihrer Neuimplementierung einen Mutex sperren, stellen Sie sicher, dass Sie keine Funktionen von QObject aufrufen, während dieser Mutex an anderer Stelle gehalten wird, da dies zu einem Deadlock führen würde.

Siehe auch „ connect()“ und „ disconnectNotify()“.

[virtual protected] void QObject::customEvent(QEvent *event)

Dieser Ereignishandler kann in einer Unterklasse neu implementiert werden, um benutzerdefinierte Ereignisse zu empfangen. Benutzerdefinierte Ereignisse sind Ereignisse, deren Typwert mindestens so groß ist wie der Wert „ QEvent::User “ der Enumeration „ QEvent::Type “ und die in der Regel eine Unterklasse von „ QEvent “ sind. Das Ereignis wird über den Parameter „ event “ übergeben.

Siehe auch „ event()“ und „ QEvent “.

[slot] void QObject::deleteLater()

Markiert dieses Objekt zur Löschung vor.

Das Objekt wird gelöscht, sobald die Kontrolle an die Ereignisschleife zurückgegeben wird. Wenn die Ereignisschleife zum Zeitpunkt des Aufrufs dieser Funktion nicht läuft (z. B. wenn `deleteLater()` für ein Objekt vor ` QCoreApplication::exec()` aufgerufen wird), wird das Objekt gelöscht, sobald die Ereignisschleife gestartet wird. Wird `deleteLater()` aufgerufen, nachdem die Hauptereignisschleife beendet wurde, wird das Objekt nicht gelöscht. Wird `deleteLater()` für ein Objekt aufgerufen, das sich in einem Thread befindet, in dem keine Ereignisschleife läuft, wird das Objekt zerstört, sobald der Thread beendet wird.

Ein gängiges Muster bei der Verwendung eines Worker- QObject s in einem „ QThread “ besteht darin, das Signal „ finished() “ des Threads mit dem Slot „ deleteLater() “ des Workers zu verbinden, um sicherzustellen, dass dieser sicher gelöscht wird:

connect(thread, &QThread::finished, worker, &QObject::deleteLater);

Beachten Sie, dass beim Ein- und Aussteigen aus einer neuen Ereignisschleife (z. B. durch das Öffnen eines modalen Dialogs) die verzögerte Löschung nicht ausgeführt wird; damit das Objekt gelöscht wird, muss die Steuerung zu der Ereignisschleife zurückkehren, aus der `deleteLater()` aufgerufen wurde. Dies gilt nicht für Objekte, die gelöscht wurden, während eine vorherige, verschachtelte Ereignisschleife noch lief: Die Qt-Ereignisschleife löscht diese Objekte, sobald die neue verschachtelte Ereignisschleife startet.

In Situationen, in denen Qt den Ereignisdispatcher nicht über z. B. ` QCoreApplication::exec()` oder ` QEventLoop::exec()` steuert, werden aufgeschobene Löschvorgänge nicht automatisch verarbeitet. Um in diesem Szenario eine aufgeschobene Löschung sicherzustellen, kann die folgende Problemumgehung verwendet werden:

const auto *eventDispatcher = QThread::currentThread()->eventDispatcher();
QObject::connect(eventDispatcher, &QAbstractEventDispatcher::aboutToBlock,
    QThread::currentThread(), []{
        if (QThread::currentThread()->loopLevel() == 0)
            QCoreApplication::sendPostedEvents(nullptr, QEvent::DeferredDelete);
    }
);

Hinweis: Diese Funktion ist threadsicher.

Siehe auch ` destroyed()` und ` QPointer`.

[signal] void QObject::destroyed(QObject *obj = nullptr)

Dieses Signal wird unmittelbar vor der Zerstörung des Objekts „ obj “ ausgesendet, nachdem alle Instanzen von „ QPointer “ benachrichtigt wurden, und kann nicht blockiert werden.

Alle untergeordneten Objekte des Objekts werden unmittelbar nach der Auslösung dieses Signals zerstört.

Siehe auch deleteLater() und QPointer.

[static, since 6.12] bool QObject::disconnect(QMetaObject::Connection &connection)

[static, since 6.12] bool QObject::disconnect(QMetaObject::Connection &&connection)

Eine Verbindung trennen.

Wenn „ connection “ den Wert „ invalid “ hat oder die Verbindung bereits getrennt wurde, wird nichts unternommen und „false“ zurückgegeben.

Hinweis: In Qt-Versionen vor 6.12 nahm diese Funktion nur „ const-& “ als Argument entgegen.

Diese Funktionen wurden in Qt 6.12 eingeführt.

Siehe auch ` connect()`.

[static] bool QObject::disconnect(const QMetaObject::Connection &connection)

Trennt die Verbindung zu connection und setzt sie auf invalid zurück.

Wenn connection ungültig ist oder bereits getrennt wurde, wird nichts unternommen und false zurückgegeben.

Hinweis: Zukünftige Versionen von Qt akzeptieren hier möglicherweise nur nicht-konstante Objekte.

Siehe auch QT_NO_DISCONNECT_CONST_CONNECTION und connect().

[static] bool QObject::disconnect(const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method)

Trennt die Verbindung „ signal “ im Objekt „ sender “ von „ method “ im Objekt „ receiver “. Gibt „ true “ zurück, wenn die Verbindung erfolgreich getrennt wurde; andernfalls wird „ false “ zurückgegeben.

Diese Funktion bietet dieselben Möglichkeiten wie disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method), verwendet jedoch QMetaMethod zur Darstellung des Signals und der Methode, die getrennt werden soll.

Zudem gibt diese Funktion „false“ zurück und trennt keine Signale und Slots, wenn:

  1. signal kein Mitglied der Sender-Klasse oder einer ihrer übergeordneten Klassen ist.
  2. method kein Mitglied der Empfängerklasse oder einer ihrer übergeordneten Klassen ist.
  3. signal „instance“ kein Signal darstellt.

Hinweis: Verwenden Sie in den Aufrufen von ` connect()` und den entsprechenden `disconnect()`-Aufrufen dieselbe Syntax – entweder als Zeiger auf eine Mitgliedsfunktion oder als Zeichenkette – unter Verwendung der Makros ` SIGNAL ` und ` SLOT `.

Um Inkonsistenzen zu vermeiden, speichern Sie das von ` connect()` zurückgegebene Verbindungs-Handle und verwenden Sie es beim Aufruf von ` disconnect()`.

Hinweis: Wenn ein ` queued connection ` getrennt wird, können bereits geplante Ereignisse dennoch ausgeliefert werden, was dazu führt, dass der Empfänger nach dem Trennen der Verbindung aufgerufen wird.

`QMetaMethod()` kann als Platzhalter im Sinne von „beliebiges Signal“ oder „beliebiger Slot im empfangenden Objekt“ verwendet werden. Ebenso kann ` nullptr ` für ` receiver ` im Sinne von „beliebiges empfangendes Objekt“ verwendet werden. In diesem Fall sollte die Methode ebenfalls `QMetaMethod()` sein. Der Parameter ` sender ` darf niemals ` nullptr` sein.

Hinweis: Das Trennen aller Signal-Slot-Verbindungen trennt auch das Signal ` QObject::destroyed()`, sofern es verbunden ist. Dies kann sich nachteilig auf Klassen auswirken, die zur Freigabe von Ressourcen auf dieses Signal angewiesen sind. Es wird empfohlen, nur die spezifischen Signale zu trennen, die durch den Anwendungscode verbunden wurden.

Siehe auch ` disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)`.

[static] bool QObject::disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)

Trennt die Verbindung „ signal “ im Objekt „ sender “ von „ method “ im Objekt „ receiver “. Gibt „ true “ zurück, wenn die Verbindung erfolgreich getrennt wurde; andernfalls wird „ false “ zurückgegeben.

Eine Signal-Slot-Verbindung wird entfernt, wenn eines der beteiligten Objekte zerstört wird.

disconnect() wird typischerweise auf drei Arten verwendet, wie die folgenden Beispiele zeigen.

  1. Alle mit den Signalen eines Objekts verbundenen Verbindungen trennen:
        QObject::disconnect(myObject, nullptr, nullptr, nullptr);

    entspricht der nicht-statischen überladenen Funktion

        myObject->disconnect();
  2. Trenne alles, was mit einem bestimmten Signal verbunden ist:
        QObject::disconnect(myObject, SIGNAL(mySignal()), nullptr, nullptr);

    entspricht der nicht-statischen überladenen Funktion

        myObject->disconnect(SIGNAL(mySignal()));
  3. Trenne einen bestimmten Empfänger:
        QObject::disconnect(myObject, nullptr, myReceiver, nullptr);

    entspricht der nicht-statischen überladenen Funktion

        myObject->disconnect(myReceiver);

Hinweis: Verwenden Sie in den Aufrufen von ` connect()` und den entsprechenden `disconnect()`-Aufrufen dieselbe Syntax – entweder als Zeiger auf eine Mitgliedsfunktion oder als Zeichenkette unter Verwendung der Makros ` SIGNAL ` und ` SLOT `.

Um Inkonsistenzen zu vermeiden, speichern Sie das von ` connect()` zurückgegebene Verbindungs-Handle und verwenden Sie es beim Aufruf von ` disconnect()`.

Hinweis: Wenn eine Verbindung vom Typ „ queued connection “ getrennt wird, können bereits geplante Ereignisse dennoch ausgeliefert werden, was dazu führt, dass der Empfänger auch nach dem Trennen der Verbindung aufgerufen wird.

nullptr kann als Platzhalter verwendet werden, der jeweils „beliebiges Signal“, „beliebiges Empfängerobjekt“ oder „beliebiger Slot im Empfängerobjekt“ bedeutet.

sender darf niemals nullptr sein. (Sie können in einem einzigen Aufruf nicht die Signale von mehr als einem Objekt trennen.)

Ist signal nullptr , trennt es receiver und method von allen Signalen. Andernfalls wird nur das angegebene Signal getrennt.

Ist receiver gleich nullptr, werden alle mit signal verbundenen Elemente getrennt. Andernfalls werden Slots in anderen Objekten als receiver nicht getrennt.

Ist „ method “ gleich „ nullptr “, werden alle Verbindungen getrennt, die mit „ receiver “ verbunden sind. Andernfalls werden nur Slots mit dem Namen „ method “ getrennt, während alle anderen Slots unverändert bleiben. „ method “ muss gleich „ nullptr “ sein, wenn „ receiver “ weggelassen wird; daher ist es nicht möglich, einen konkret benannten Slot bei allen Objekten zu trennen.

Hinweis: Das Trennen aller Signal-Slot-Verbindungen trennt auch das Signal „ QObject::destroyed()“, sofern dieses verbunden ist. Dies kann sich negativ auf Klassen auswirken, die zur Bereinigung von Ressourcen auf dieses Signal angewiesen sind. Es wird empfohlen, nur die spezifischen Signale zu trennen, die durch den Anwendungscode verbunden wurden.

Hinweis: Diese Funktion ist threadsicher.

Siehe auch ` connect()`.

bool QObject::disconnect(const QObject *receiver, const char *method = nullptr) const

Trennt alle Signale in diesem Objekt von „ method “ unter receiver ab.

Hinweis: Verwenden Sie in den Aufrufen von ` connect()` und den entsprechenden `disconnect()`-Aufrufen dieselbe Syntax – entweder als Zeiger auf eine Mitgliedsfunktion oder als Zeichenkette – unter Verwendung der Makros ` SIGNAL ` und ` SLOT `.

Um Inkonsistenzen zu vermeiden, speichern Sie das von ` connect()` zurückgegebene Verbindungs-Handle und verwenden Sie es beim Aufruf von ` disconnect()`.

Hinweis: Wenn eine „ queued connection “-Verbindung getrennt wird, können bereits geplante Ereignisse dennoch zugestellt werden, was dazu führt, dass der Empfänger auch nach dem Trennen der Verbindung noch aufgerufen wird.

Eine Signal-Slot-Verbindung wird entfernt, wenn eines der beteiligten Objekte zerstört wird.

Diese Funktion überlädt die Methode ` QObject::disconnect()`.

bool QObject::disconnect(const char *signal = nullptr, const QObject *receiver = nullptr, const char *method = nullptr) const

Trennt die Verbindung zwischen signal und method von receiver.

Hinweis: Verwenden Sie in den Aufrufen von ` connect()` und den entsprechenden `disconnect()`-Aufrufen dieselbe Syntax – entweder als Zeiger auf eine Mitgliedsfunktion oder als Zeichenkette – unter Verwendung der Makros ` SIGNAL ` und ` SLOT `.

Um Inkonsistenzen zu vermeiden, speichern Sie das von connect() zurückgegebene Verbindungs-Handle und verwenden Sie es beim Aufruf von disconnect().

Hinweis: Wenn eine „ queued connection “-Verbindung getrennt wird, können bereits geplante Ereignisse dennoch ausgeliefert werden, was dazu führt, dass der Empfänger noch nach der Trennung der Verbindung aufgerufen wird.

Eine Signal-Slot-Verbindung wird entfernt, wenn eines der beteiligten Objekte zerstört wird.

Hinweis: Das Trennen aller Signal-Slot-Verbindungen führt auch zur Trennung des Signals „ QObject::destroyed()“, sofern dieses verbunden ist. Dies kann sich nachteilig auf Klassen auswirken, die auf dieses Signal zur Bereinigung von Ressourcen angewiesen sind. Es wird empfohlen, nur die spezifischen Signale zu trennen, die durch Anwendungscode verbunden wurden.

Diese Funktion überlädt die Funktion ` QObject::disconnect()`.

Hinweis: Diese Funktion ist threadsicher.

[static] template <typename PointerToMemberFunction> bool QObject::disconnect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method)

Trennt die Verbindung „ signal “ im Objekt „ sender “ von „ method “ im Objekt „ receiver “. Gibt „ true “ zurück, wenn die Verbindung erfolgreich getrennt wurde; andernfalls wird „ false “ zurückgegeben.

Eine Signal-Slot-Verbindung wird entfernt, wenn eines der beteiligten Objekte zerstört wird.

disconnect() wird typischerweise auf drei Arten verwendet, wie die folgenden Beispiele zeigen.

  1. Alle Verbindungen zu den Signalen eines Objekts trennen:
        QObject::disconnect(myObject, nullptr, nullptr, nullptr);
  2. Alle Verbindungen zu einem bestimmten Signal trennen:
        QObject::disconnect(myObject, &MyObject::mySignal, nullptr, nullptr);
  3. Einen bestimmten Empfänger trennen:
        QObject::disconnect(myObject, nullptr, myReceiver, nullptr);
  4. Eine Verbindung von einem bestimmten Signal zu einem bestimmten Steckplatz trennen:
        QObject::disconnect(lineEdit, &QLineEdit::textChanged,
                        label,  &QLabel::setText);

nullptr kann als Platzhalter verwendet werden und bedeutet jeweils „beliebiges Signal“, „beliebiges Empfangsobjekt“ oder „beliebiger Steckplatz im Empfangsobjekt“.

Die „ sender “ darf niemals „ nullptr “ lauten. (Sie können in einem einzigen Aufruf nicht die Verbindung von Signalen zu mehr als einem Objekt trennen.)

Ist ` signal ` ` nullptr`, werden ` receiver ` und ` method ` von allen Signalen getrennt. Andernfalls wird nur das angegebene Signal getrennt.

Ist ` receiver ` gleich ` nullptr`, werden alle mit ` signal` verbundenen Elemente getrennt. Andernfalls werden nur die Slots im angegebenen Empfänger getrennt. `disconnect()` mit einem von Null verschiedenen ` receiver ` trennt außerdem Slot-Funktionen, die mit ` receiver ` als Kontext-Objekt verbunden waren.

Ist method gleich nullptr, werden alle Verbindungen getrennt, die mit receiver verbunden sind. Andernfalls werden nur Slots mit dem Namen method getrennt, während alle anderen Slots unverändert bleiben. Das method muss nullptr sein, wenn receiver weggelassen wird; daher ist es nicht möglich, einen konkret benannten Slot auf allen Objekten zu trennen.

Hinweis: Es ist nicht möglich, diese Überladung zu verwenden, um Signale zu trennen, die mit Funktoren oder Lambda-Ausdrücken verbunden sind. Das liegt daran, dass diese nicht verglichen werden können. Verwenden Sie stattdessen die Überladung, die ein ` QMetaObject::Connection` akzeptiert.

Hinweis: Sofern ` method `nicht ` nullptr` ist, trennt diese Funktion auch keine Verbindungen, die mit der stringbasierten Version von ` connect()` hergestellt wurden. Um solche Verbindungen zu trennen, verwenden Sie die entsprechende stringbasierte Überladung von `disconnect()`.

Diese Funktion überlagert QObject::disconnect().

Hinweis: Diese Funktion ist threadsicher.

Siehe auch ` connect()`.

[virtual protected] void QObject::disconnectNotify(const QMetaMethod &signal)

Diese virtuelle Funktion wird aufgerufen, wenn in diesem Objekt eine Verbindung zu signal getrennt wurde.

Ein Beispiel dafür, wie man „ signal “ mit einem bestimmten Signal vergleicht, finden Sie unter „ connectNotify()“.

Wenn alle Signale von diesem Objekt getrennt wurden (z. B. wenn das Signal-Argument von ` disconnect()` ` nullptr` war), wird `disconnectNotify()` nur einmal aufgerufen, und ` signal ` ist ein ungültiger ` QMetaMethod ` (`QMetaMethod::isValid()` gibt ` false` zurück).

Warnung: Diese Funktion verstößt gegen das objektorientierte Prinzip der Modularität. Sie kann jedoch nützlich sein, um den Zugriff auf ressourcenintensive Ressourcen zu optimieren.

Warnung: Diese Funktion wird von dem Thread aufgerufen, der die Trennung der Verbindung durchführt; dies kann ein anderer Thread sein als der, in dem dieses Objekt liegt. Diese Funktion kann auch aufgerufen werden, während ein interner Mutex von ` QObject ` gesperrt ist. Es ist daher nicht zulässig, aus Ihrer Neuimplementierung heraus erneut in Funktionen von ` QObject ` einzusteigen, einschließlich ` isSignalConnected()`. Wenn Sie in Ihrer Neuimplementierung einen Mutex sperren, stellen Sie sicher, dass Sie keine Funktionen von ` QObject ` aufrufen, während dieser Mutex an anderer Stelle gehalten wird, da dies zu einem Deadlock führen würde.

Siehe auch „ disconnect()“ und „ connectNotify()“.

void QObject::dumpObjectInfo() const

Gibt Informationen zu Signalverbindungen usw. für dieses Objekt in der Debug-Ausgabe aus.

Hinweis: Vor Qt 5.9 war diese Funktion nicht als `const` definiert.

Siehe auch ` dumpObjectTree()`.

void QObject::dumpObjectTree() const

Gibt eine Baumstruktur der untergeordneten Elemente in der Debug-Ausgabe aus.

Hinweis: Vor Qt 5.9 war diese Funktion nicht als `const` deklariert.

Siehe auch ` dumpObjectInfo()`.

QList<QByteArray> QObject::dynamicPropertyNames() const

Gibt die Namen aller Eigenschaften zurück, die dem Objekt mithilfe von ` setProperty()` dynamisch hinzugefügt wurden.

[virtual] bool QObject::event(QEvent *e)

Diese virtuelle Funktion empfängt Ereignisse, die an ein Objekt gesendet werden, und sollte „true“ zurückgeben, wenn das Ereignis e erkannt und verarbeitet wurde.

Die Funktion „event()“ kann neu implementiert werden, um das Verhalten eines Objekts anzupassen.

Stellen Sie sicher, dass Sie für alle Ereignisse, die Sie nicht selbst behandelt haben, die Implementierung der übergeordneten Ereignisklasse aufrufen.

Beispiel:

class MyClass : public QWidget
{
    Q_OBJECT

public:
    MyClass(QWidget *parent = nullptr);
    ~MyClass();

    bool event(QEvent* ev) override
    {
        if (ev->type() == QEvent::PolishRequest) {
            // overwrite handling of PolishRequest if any
            doThings();
            return true;
        } else  if (ev->type() == QEvent::Show) {
            // complement handling of Show if any
            doThings2();
            QWidget::event(ev);
            return true;
        }
        // Make sure the rest of events are handled
        return QWidget::event(ev);
    }
};

Siehe auch „ installEventFilter()“, „ timerEvent()“, „ QCoreApplication::sendEvent()“ und „ QCoreApplication::postEvent()“.

[virtual] bool QObject::eventFilter(QObject *watched, QEvent *event)

Filtert Ereignisse, wenn dieses Objekt als Ereignisfilter für das Objekt „ watched “ installiert wurde.

Wenn Sie in Ihrer Neuimplementierung dieser Funktion das Objekt „ event “ herausfiltern möchten, d. h. verhindern wollen, dass es weiterverarbeitet wird, geben Sie „true“ zurück; andernfalls geben Sie „false“ zurück.

Beispiel:

class MainWindow : public QMainWindow
{
public:
    MainWindow();

protected:
    bool eventFilter(QObject*obj, QEvent*ev) override;

private:
    QTextEdit*textEdit;
};

MainWindow::MainWindow()
{
    textEdit = new QTextEdit;
    setCentralWidget(textEdit);

    textEdit->installEventFilter(this);
}

bool MainWindow::eventFilter(QObject*obj, QEvent*event)
{
    if (obj== textEdit) {
        if (event->type()== QEvent::KeyPress) {
            QKeyEvent*keyEvent = static_cast<QKeyEvent*>(event);
            qDebug() << "Ate key press" << keyEvent->key();
           return true;
        } else {
            return false;
        }
    } else {
        // das Ereignis an die übergeordnete Klasse weiterleiten
        return QMainWindow::eventFilter(obj, event);
    }
}

Beachten Sie im obigen Beispiel, dass nicht verarbeitete Ereignisse an die Funktion `eventFilter()` der Basisklasse weitergeleitet werden, da die Basisklasse `eventFilter()` möglicherweise für ihre eigenen internen Zwecke neu implementiert hat.

Einige Ereignisse, wie z. B. ` QEvent::ShortcutOverride `, müssen explizit akzeptiert werden (durch Aufruf von ` accept()`), um eine Weiterleitung zu verhindern.

Warnung: Wenn Sie das Empfängerobjekt in dieser Funktion löschen, müssen Sie unbedingt `true` zurückgeben. Andernfalls leitet Qt das Ereignis an das gelöschte Objekt weiter, was zu einem Programmabsturz führen kann.

Siehe auch ` installEventFilter()`.

template <typename T> T QObject::findChild(QAnyStringView name, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const

Gibt das untergeordnete Objekt dieses Objekts zurück, das in den Typ T umgewandelt werden kann und den Namen „ name “ trägt, oder „ nullptr “, falls kein solches Objekt vorhanden ist. Ein Null-Argument für „ name “ führt dazu, dass alle Objekte abgeglichen werden. Ein leeres, nicht-Null-Argument für „ name “ gleicht nur Objekte ab, deren „ objectName “ leer ist. Die Suche wird rekursiv durchgeführt, es sei denn, „ options “ gibt die Option „FindDirectChildrenOnly“ an.

Wenn mehr als ein Kind der Suche entspricht, wird der direkteste Vorfahr zurückgegeben. Gibt es mehrere direkteste Vorfahren, wird das erste Kind in children() zurückgegeben. In diesem Fall ist es besser, findChildren() zu verwenden, um die vollständige Liste aller Kinder zu erhalten.

Dieses Beispiel gibt ein Kind von ` QPushButton ` aus ` parentWidget ` mit dem Namen ` "button1"` zurück, auch wenn die Schaltfläche kein direktes Kind des übergeordneten Elements ist:

QPushButton *button = parentWidget->findChild<QPushButton *>("button1");

Dieses Beispiel gibt ein Kind „ QListWidget “ von „ parentWidget “ zurück:

QListWidget *list = parentWidget->findChild<QListWidget *>();

Dieses Beispiel gibt ein untergeordnetes Element „ QPushButton “ von „ parentWidget “ (seinem direkten übergeordneten Element) mit dem Namen „ "button1" “ zurück:

QPushButton *button = parentWidget->findChild<QPushButton *>("button1", Qt::FindDirectChildrenOnly);

Dieses Beispiel gibt ein „ QListWidget “-Kind von „ parentWidget “, seinem direkten übergeordneten Element, zurück:

QListWidget *list = parentWidget->findChild<QListWidget *>(Qt::FindDirectChildrenOnly);

Hinweis: In Qt-Versionen vor 6.7 nahm diese Funktion „ name “ als „ QString “ und nicht als „ QAnyStringView “ an.

Siehe auch „ findChildren()“.

[since 6.7] template <typename T> T QObject::findChild(Qt::FindChildOptions options = Qt::FindChildrenRecursively) const

Gibt das untergeordnete Objekt dieses Objekts zurück, das in den Typ T umgewandelt werden kann, oder nullptr, falls kein solches Objekt vorhanden ist. Die Suche erfolgt rekursiv, es sei denn, options gibt die Option FindDirectChildrenOnly an.

Wenn mehr als ein Kind der Suche entspricht, wird der direkteste Vorfahr zurückgegeben. Gibt es mehrere direkteste Vorfahren, wird das erste Kind in ` children()` zurückgegeben. In diesem Fall ist es besser, ` findChildren()` zu verwenden, um die vollständige Liste aller Kinder zu erhalten.

Dies ist eine überladene Funktion.

Diese Funktion wurde in Qt 6.7 eingeführt.

Siehe auch ` findChildren()`.

template <typename T> QList<T> QObject::findChildren(QAnyStringView name, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const

Gibt alle untergeordneten Objekte dieses Objekts mit dem angegebenen „ name “ zurück, die in den Typ T umgewandelt werden können, oder eine leere Liste, falls keine solchen Objekte vorhanden sind. Ein „ name “-Argument mit dem Wert „null“ führt dazu, dass alle Objekte abgeglichen werden, ein leeres Argument hingegen nur diejenigen, deren „ objectName “ leer ist. Die Suche erfolgt rekursiv, es sei denn, „ options “ gibt die Option „FindDirectChildrenOnly“ an.

Das folgende Beispiel zeigt, wie man eine Liste der untergeordneten „ QWidget“ des angegebenen „ parentWidget “ mit dem Namen „ widgetname “ ermittelt:

QList<QWidget *> widgets = parentWidget->findChildren<QWidget *>("widgetname");

Dieses Beispiel gibt alle „ QPushButtons“ zurück, die Kinder von „ parentWidget “ sind:

QList<QPushButton *> allPButtons = parentWidget->findChildren<QPushButton *>();

Dieses Beispiel gibt alle „ QPushButtons“ zurück, die direkte Unterelemente von „ parentWidget “ sind:

QList<QPushButton *> childButtons = parentWidget.findChildren<QPushButton *>(Qt::FindDirectChildrenOnly);

Hinweis: In Qt-Versionen vor 6.7 nahm diese Funktion „ name “ als „ QString “ entgegen, nicht als „ QAnyStringView “.

Siehe auch findChild().

[since 6.3] template <typename T> QList<T> QObject::findChildren(Qt::FindChildOptions options = Qt::FindChildrenRecursively) const

Gibt alle untergeordneten Objekte dieses Objekts zurück, die in den Typ T umgewandelt werden können, oder eine leere Liste, falls keine solchen Objekte vorhanden sind. Die Suche erfolgt rekursiv, es sei denn, unter options ist die Option „FindDirectChildrenOnly“ festgelegt.

Dies ist eine überladene Funktion.

Diese Funktion wurde in Qt 6.3 eingeführt.

Siehe auch findChild().

template <typename T> QList<T> QObject::findChildren(const QRegularExpression &re, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const

Gibt die untergeordneten Objekte dieses Objekts zurück, die in den Typ T umgewandelt werden können und deren Namen dem regulären Ausdruck „ re “ entsprechen, oder eine leere Liste, falls keine solchen Objekte vorhanden sind. Die Suche erfolgt rekursiv, es sei denn, unter „ options “ ist die Option „FindDirectChildrenOnly“ festgelegt.

Diese Funktion überlädt QObject::findChildren().

bool QObject::inherits(const char *className) const

Gibt „ true “ zurück, wenn dieses Objekt eine Instanz einer Klasse ist, die von „ className “ erbt, oder eine Unterklasse von „ QObject “, die von „ className “ erbt; andernfalls wird „ false “ zurückgegeben.

Eine Klasse gilt als sich selbst vererbend.

Beispiel:

QTimer *timer = new QTimer;         // QTimer inherits QObject
timer->inherits("QTimer");          // returns true
timer->inherits("QObject");         // returns true
timer->inherits("QAbstractButton"); // returns false

// QVBoxLayout inherits QObject and QLayoutItem
QVBoxLayout *layout = new QVBoxLayout;
layout->inherits("QObject");        // returns true
layout->inherits("QLayoutItem");    // returns true (even though QLayoutItem is not a QObject)

Wenn Sie feststellen müssen, ob ein Objekt eine Instanz einer bestimmten Klasse ist, um es umzuwandeln, sollten Sie stattdessen die Funktion ` qobject_cast<Type *>(object)` verwenden.

Siehe auch „ metaObject()“ und „ qobject_cast()“.

void QObject::installEventFilter(QObject *filterObj)

Installiert einen Ereignisfilter „ filterObj “ für dieses Objekt. Beispiel:

monitoredObj->installEventFilter(filterObj);

Ein Ereignisfilter ist ein Objekt, das alle Ereignisse empfängt, die an dieses Objekt gesendet werden. Der Filter kann das Ereignis entweder stoppen oder an dieses Objekt weiterleiten. Der Ereignisfilter filterObj empfängt Ereignisse über seine Funktion eventFilter(). Die Funktion eventFilter() muss „true“ zurückgeben, wenn das Ereignis gefiltert (d. h. gestoppt) werden soll; andernfalls muss sie „false“ zurückgeben.

Sind mehrere Ereignisfilter für ein einzelnes Objekt installiert, wird der zuletzt installierte Filter zuerst aktiviert.

Falls für dieses Objekt bereits „ filterObj “ installiert wurde, verschiebt diese Funktion es so, dass es so wirkt, als wäre es zuletzt installiert worden.

Hier ist eine „ KeyPressEater “-Klasse, die die Tasteneingaben der von ihr überwachten Objekte abfängt:

class KeyPressEater : public QObject
{
    Q_OBJECT
public:
    KeyPressEater(QObject*parent = nullptr) : QObject(parent) {}
//...

protected:
    bool eventFilter(QObject*obj, QEvent*event) override;
};

bool KeyPressEater::eventFilter(QObject*obj, QEvent*event)
{
    if (event->type()== QEvent::KeyPress) {
        QKeyEvent*keyEvent = static_cast<QKeyEvent*>(event);
        qDebug("Ate key press %d", keyEvent->key());
       return true;
    } else {
        // Standard-Ereignisverarbeitung
        return QObject::eventFilter(obj, event);
    }
}

Und so installierst du es auf zwei Widgets:

KeyPressEater *keyPressEater = new KeyPressEater(this);
QPushButton *pushButton = new QPushButton(this);
QListView *listView = new QListView(this);

pushButton->installEventFilter(keyPressEater);
listView->installEventFilter(keyPressEater);

Die Klasse „ QShortcut “ nutzt diese Technik beispielsweise, um Tastenkombinationen abzufangen.

Warnung: Wenn Sie das Empfängerobjekt in Ihrer Funktion ` eventFilter()` löschen, müssen Sie unbedingt `true` zurückgeben. Wenn Sie `false` zurückgeben, sendet Qt das Ereignis an das gelöschte Objekt, und das Programm stürzt ab.

Beachten Sie, dass sich das Filterobjekt im selben Thread wie dieses Objekt befinden muss. Befindet sich ` filterObj ` in einem anderen Thread, hat diese Funktion keine Auswirkung. Werden entweder ` filterObj ` oder dieses Objekt nach dem Aufruf dieser Funktion in einen anderen Thread verschoben, wird der Ereignisfilter erst dann aufgerufen, wenn beide Objekte wieder dieselbe Thread-Affinität aufweisen (sie wird nicht entfernt).

Siehe auch removeEventFilter(), eventFilter() und event().

[noexcept, since 6.11] bool QObject::isQmlExposed() const

Gibt zurück, ob das Objekt von der QML-Engine erstellt wurde oder ob die Eigentumsrechte explizit über ` QJSEngine::setObjectOwnership()` festgelegt wurden.

Diese Funktion wurde in Qt 6.11 eingeführt.

[since 6.4] bool QObject::isQuickItemType() const

Gibt „ true “ zurück, wenn das Objekt ein „ QQuickItem “ ist; andernfalls wird „ false “ zurückgegeben.

Der Aufruf dieser Funktion entspricht dem Aufruf von ` inherits("QQuickItem")`, ist jedoch wesentlich schneller.

Diese Funktion wurde in Qt 6.4 eingeführt.

[protected] bool QObject::isSignalConnected(const QMetaMethod &signal) const

Gibt „ true “ zurück, wenn der „ signal “ mit mindestens einem Empfänger verbunden ist; andernfalls wird „ false “ zurückgegeben.

signal muss ein Signal-Element dieses Objekts sein, andernfalls ist das Verhalten undefiniert.

    static const QMetaMethod valueChangedSignal = QMetaMethod::fromSignal(&MyObject::valueChanged);
    if (QObject::isSignalConnected(valueChangedSignal)) {
        QByteArray data;
        data = get_the_value();       // expensive operation
        emit valueChanged(data);
    }

Wie der obige Codeausschnitt veranschaulicht, können Sie diese Funktion nutzen, um aufwendige Operationen zu vermeiden oder die Ausgabe eines Signals zu verhindern, auf das niemand hört.

Warnung: In einer Multithread-Anwendung ist nicht garantiert, dass aufeinanderfolgende Aufrufe dieser Funktion dieselben Ergebnisse liefern.

Warnung: Diese Funktion verstößt gegen das objektorientierte Prinzip der Modularität. Insbesondere darf diese Funktion nicht aus einer Überschreibung von ` connectNotify()` oder ` disconnectNotify()` aufgerufen werden, da diese aus einem beliebigen Thread aufgerufen werden könnten.

Siehe auch ` receivers()`.

bool QObject::isWidgetType() const

Gibt ` true ` zurück, wenn es sich bei dem Objekt um ein Widget handelt; andernfalls wird ` false` zurückgegeben.

Der Aufruf dieser Funktion entspricht dem Aufruf von ` inherits("QWidget")`, ist jedoch wesentlich schneller.

bool QObject::isWindowType() const

Gibt „ true “ zurück, wenn es sich bei dem Objekt um ein Fenster handelt; andernfalls wird „ false “ zurückgegeben.

Der Aufruf dieser Funktion entspricht dem Aufruf von ` inherits("QWindow")`, ist jedoch wesentlich schneller.

void QObject::killTimer(int id)

Beendet den Timer mit der Timer-ID „ id “.

Die Timer-ID wird von „ startTimer()“ zurückgegeben, wenn ein Timer-Ereignis gestartet wird.

Siehe auch „ timerEvent()“ und „ startTimer()“.

[since 6.8] void QObject::killTimer(Qt::TimerId id)

Dies ist eine überladene Funktion.

Diese Funktion wurde in Qt 6.8 eingeführt.

[virtual] const QMetaObject *QObject::metaObject() const

Gibt einen Zeiger auf das Metaobjekt dieses Objekts zurück.

Ein Metaobjekt enthält Informationen über eine Klasse, die von ` QObject` erbt, z. B. Klassenname, Name der Oberklasse, Eigenschaften, Signale und Slots. Jede Unterklasse von ` QObject `, die das Makro ` Q_OBJECT ` enthält, verfügt über ein Metaobjekt.

Die Metaobjekt-Informationen werden vom Signal-/Slot-Verbindungsmechanismus und vom Eigenschaftssystem benötigt. Auch die Funktion ` inherits()` nutzt das Metaobjekt.

Wenn Sie keinen Zeiger auf eine tatsächliche Objektinstanz haben, aber dennoch auf das Metaobjekt einer Klasse zugreifen möchten, können Sie ` staticMetaObject` verwenden.

Beispiel:

QObject *obj = new QPushButton;
obj->metaObject()->className();             // returns "QPushButton"

QPushButton::staticMetaObject.className();  // returns "QPushButton"

Siehe auch ` staticMetaObject`.

bool QObject::moveToThread(QThread *targetThread)

Ändert die Thread-Affinität für dieses Objekt und seine untergeordneten Objekte und gibt bei Erfolg ` true ` zurück. Das Objekt kann nicht verschoben werden, wenn es ein übergeordnetes Objekt hat. Die Ereignisverarbeitung wird im ` targetThread` fortgesetzt.

Um ein Objekt in den Hauptthread zu verschieben, rufen Sie mit ` QApplication::instance()` einen Zeiger auf die aktuelle Anwendung ab und verwenden Sie anschließend ` QApplication::thread()`, um den Thread zu ermitteln, in dem die Anwendung ausgeführt wird. Beispiel:

myObject->moveToThread(QApplication::instance()->thread());

Wenn ` targetThread ` gleich ` nullptr` ist, wird die gesamte Ereignisverarbeitung für dieses Objekt und seine untergeordneten Objekte angehalten, da sie keinem Thread mehr zugeordnet sind.

Beachten Sie, dass alle aktiven Timer für das Objekt zurückgesetzt werden. Die Timer werden zunächst im aktuellen Thread angehalten und im „ targetThread “ (mit demselben Intervall) neu gestartet. Daher kann das ständige Verschieben eines Objekts zwischen Threads dazu führen, dass Timer-Ereignisse auf unbestimmte Zeit verschoben werden.

Unmittelbar vor der Änderung der Thread-Affinität wird ein „ QEvent::ThreadChange “-Ereignis an dieses Objekt gesendet. Sie können dieses Ereignis verarbeiten, um spezielle Verarbeitungsschritte durchzuführen. Beachten Sie, dass alle neuen Ereignisse, die an dieses Objekt gesendet werden, im „ targetThread “ verarbeitet werden, sofern die „ nullptr “-Einstellung nicht aktiv ist: Wenn „ nullptr “ gesetzt ist, kann keine Ereignisverarbeitung für dieses Objekt oder seine untergeordneten Objekte stattfinden, da diese keinem Thread mehr zugeordnet sind.

Warnung: Diese Funktion ist nicht threadsicher; der aktuelle Thread muss mit der aktuellen Thread-Affinität übereinstimmen. Mit anderen Worten: Diese Funktion kann ein Objekt nur vom aktuellen Thread in einen anderen Thread „verschieben“, sie kann jedoch kein Objekt aus einem beliebigen Thread in den aktuellen Thread „holen“. Es gibt jedoch eine Ausnahme von dieser Regel: Objekte ohne Thread-Affinität können in den aktuellen Thread „geholt“ werden.

In Qt-Versionen vor 6.7 hatte diese Funktion keinen Rückgabewert (void).

Siehe auch thread().

[private signal] void QObject::objectNameChanged(const QString &objectName)

Dieses Signal wird ausgelöst, nachdem der Name des Objekts geändert wurde. Der neue Objektname wird als „ objectName “ übergeben.

Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, kann jedoch nicht vom Benutzer ausgelöst werden.

Hinweis: Notifier -Signal für die Eigenschaft „ objectName “.

Siehe auch „ QObject::objectName “.

QObject *QObject::parent() const

Gibt einen Zeiger auf das übergeordnete Objekt zurück.

Siehe auch „ setParent()“ und „ children()“.

QVariant QObject::property(const char *name) const

Gibt den Wert der Eigenschaft „ name “ des Objekts zurück.

Wenn keine solche Eigenschaft vorhanden ist, ist die zurückgegebene Variante ungültig.

Informationen zu allen verfügbaren Eigenschaften werden über die Funktionen „ metaObject()“ und „ dynamicPropertyNames()“ bereitgestellt.

Siehe auch setProperty(), QVariant::isValid(), metaObject() und dynamicPropertyNames().

[protected] int QObject::receivers(const char *signal) const

Gibt die Anzahl der an den „ signal “ angeschlossenen Empfänger zurück.

Da sowohl Slots als auch Signale als Empfänger für Signale verwendet werden können und dieselben Verbindungen mehrfach hergestellt werden können, entspricht die Anzahl der Empfänger der Anzahl der von diesem Signal hergestellten Verbindungen.

Beim Aufruf dieser Funktion können Sie das Makro „ SIGNAL() “ verwenden, um ein bestimmtes Signal zu übergeben:

if (receivers(SIGNAL(valueChanged(QByteArray))) > 0) {
    QByteArray data;
    get_the_value(&data);       // expensive operation
    emit valueChanged(data);
}

Wie der obige Codeausschnitt veranschaulicht, können Sie diese Funktion nutzen, um ressourcenintensive Operationen zu vermeiden oder die Ausgabe eines Signals zu verhindern, das von niemandem abgehört wird.

Warnung: In einer Multithread-Anwendung ist nicht garantiert, dass aufeinanderfolgende Aufrufe dieser Funktion zu denselben Ergebnissen führen.

Warnung: Diese Funktion verstößt gegen das objektorientierte Prinzip der Modularität. Insbesondere darf diese Funktion nicht aus einer Überschreibung von ` connectNotify()` oder ` disconnectNotify()` aufgerufen werden, da diese aus beliebigen Threads aufgerufen werden könnten.

Siehe auch ` isSignalConnected()`.

void QObject::removeEventFilter(QObject *obj)

Entfernt ein Ereignisfilterobjekt „ obj “ aus diesem Objekt. Die Anforderung wird ignoriert, wenn kein solcher Ereignisfilter installiert wurde.

Alle Ereignisfilter für dieses Objekt werden automatisch entfernt, wenn dieses Objekt zerstört wird.

Das Entfernen eines Ereignisfilters ist immer sicher, auch während der Aktivierung des Ereignisfilters (d. h. aus der Funktion ` eventFilter()` heraus).

Siehe auch installEventFilter(), eventFilter() und event().

[protected] QObject *QObject::sender() const

Gibt einen Zeiger auf das Objekt zurück, das das Signal gesendet hat, sofern die Funktion in einem durch ein Signal aktivierten Slot aufgerufen wird; andernfalls wird ` nullptr` zurückgegeben. Der Zeiger ist nur während der Ausführung des Slots gültig, der diese Funktion aus dem Thread-Kontext dieses Objekts aufruft.

Der von dieser Funktion zurückgegebene Zeiger wird ungültig, wenn der Absender zerstört wird oder wenn der Slot vom Signal des Absenders getrennt wird.

Warnung: Diese Funktion verstößt gegen das objektorientierte Prinzip der Modularität. Der Zugriff auf den Absender kann jedoch nützlich sein, wenn viele Signale mit einem einzigen Slot verbunden sind.

Warnung: Wie oben erwähnt, ist der Rückgabewert dieser Funktion ungültig, wenn der Slot über einen „ Qt::DirectConnection “ von einem anderen Thread als dem Thread dieses Objekts aufgerufen wird. Verwenden Sie diese Funktion nicht in einem solchen Szenario.

Siehe auch ` senderSignalIndex()`.

[protected] int QObject::senderSignalIndex() const

Gibt den Metamethode-Index des Signals zurück, das den aktuell ausgeführten Slot aufgerufen hat, der ein Mitglied der Klasse ist, die von ` sender()` zurückgegeben wird. Wird die Funktion außerhalb eines durch ein Signal aktivierten Slots aufgerufen, wird -1 zurückgegeben.

Bei Signalen mit Standardparametern gibt diese Funktion immer den Index mit allen Parametern zurück, unabhängig davon, welcher bei ` connect()` verwendet wurde. Das Signal ` destroyed(QObject *obj = \nullptr) ` hat beispielsweise zwei verschiedene Indizes (mit und ohne Parameter), doch diese Funktion gibt immer den Index mit einem Parameter zurück. Dies gilt nicht, wenn Signale mit unterschiedlichen Parametern überladen werden.

Warnung: Diese Funktion verstößt gegen das objektorientierte Prinzip der Modularität. Der Zugriff auf den Signalindex kann jedoch nützlich sein, wenn viele Signale mit einem einzelnen Slot verbunden sind.

Warnung: Der Rückgabewert dieser Funktion ist ungültig, wenn der Slot über einen „ Qt::DirectConnection “ von einem Thread aus aufgerufen wird, der sich vom Thread dieses Objekts unterscheidet. Verwenden Sie diese Funktion in einem solchen Szenario nicht.

Siehe auch „ sender()“, „ QMetaObject::indexOfSignal()“ und „ QMetaObject::method()“.

void QObject::setObjectName(const QString &name)

Setzt den Namen des Objekts auf „ name “.

Hinweis: Setter -Funktion für die Eigenschaft „ objectName “.

Siehe auch „ objectName()“.

[since 6.4] void QObject::setObjectName(QAnyStringView name)

Hinweis: Setter -Funktion für die Eigenschaft „ objectName “.

Dies ist eine überladene Funktion.

Diese Funktion wurde in Qt 6.4 eingeführt.

void QObject::setParent(QObject *parent)

Macht das Objekt zu einem untergeordneten Element von parent.

Siehe auch „ parent()“ und „ children()“.

bool QObject::setProperty(const char *name, const QVariant &value)

Setzt den Wert der Eigenschaft „ name “ des Objekts auf „ value “.

Wenn die Eigenschaft in der Klasse mit ` Q_PROPERTY ` definiert ist, wird bei Erfolg `true` und andernfalls `false` zurückgegeben. Wenn die Eigenschaft nicht mit ` Q_PROPERTY` definiert ist und daher nicht im Metaobjekt aufgeführt ist, wird sie als dynamische Eigenschaft hinzugefügt und `false` zurückgegeben.

Informationen zu allen verfügbaren Eigenschaften werden über die Methoden ` metaObject()` und ` dynamicPropertyNames()` bereitgestellt.

Dynamische Eigenschaften können erneut mit ` property()` abgefragt und durch Setzen des Eigenschaftswerts auf ein ungültiges ` QVariant` entfernt werden. Das Ändern des Werts einer dynamischen Eigenschaft bewirkt, dass ein ` QDynamicPropertyChangeEvent ` an das Objekt gesendet wird.

Hinweis: Dynamische Eigenschaften, die mit „_q_“ beginnen, sind für interne Zwecke reserviert.

Siehe auch „ property()“, „ metaObject()“, „ dynamicPropertyNames()“ und „ QMetaProperty::write()“.

[since 6.6] bool QObject::setProperty(const char *name, QVariant &&value)

Diese Funktion überlädt die Funktion „ QObject::setProperty “.

Diese Funktion wurde in Qt 6.6 eingeführt.

[noexcept] bool QObject::signalsBlocked() const

Gibt „ true “ zurück, wenn Signale blockiert sind; andernfalls wird „ false “ zurückgegeben.

Signale werden standardmäßig nicht blockiert.

Siehe auch blockSignals() und QSignalBlocker.

int QObject::startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer)

Dies ist eine überladene Funktion, die einen Timer vom Typ „ timerType “ mit einer Zeitüberschreitung von „ interval “ Millisekunden startet. Dies entspricht dem Aufruf:

startTimer(std::chrono::milliseconds{interval}, timerType);

Ab Qt 6.10 führt die Angabe eines negativen Intervalls zu einer Laufzeitwarnung, und der Wert wird auf 1 ms zurückgesetzt. Vor Qt 6.10 ließ sich bei einem Qt-Timer zwar ein negatives Intervall festlegen, das Verhalten war jedoch unvorhersehbar (beispielsweise wurde der Timer angehalten, wenn er bereits lief, oder gar nicht erst gestartet).

Siehe auch timerEvent(), killTimer(), QChronoTimer und QBasicTimer.

int QObject::startTimer(std::chrono::nanoseconds interval, Qt::TimerType timerType = Qt::CoarseTimer)

Startet einen Timer und gibt eine Timer-Kennung zurück; falls der Timer nicht gestartet werden konnte, wird Null zurückgegeben.

Ein Timer-Ereignis tritt alle interval auf, bis killTimer() aufgerufen wird. Ist interval gleich std::chrono::duration::zero(), dann tritt das Timer-Ereignis jedes Mal auf, wenn die Steuerung zur Ereignisschleife zurückkehrt, d. h., wenn keine nativen Fenstersystemereignisse mehr zu verarbeiten sind.

Ab Qt 6.10 führt die Festlegung eines negativen Intervalls zu einer Laufzeitwarnung und der Wert wird auf 1 ms zurückgesetzt. Vor Qt 6.10 konnte man bei einem Qt-Timer zwar ein negatives Intervall festlegen, das Verhalten war jedoch unvorhersehbar (beispielsweise wurde der Timer angehalten, wenn er bereits lief, oder gar nicht erst gestartet).

Die virtuelle Funktion ` timerEvent()` wird mit der Ereignisparameterklasse ` QTimerEvent ` aufgerufen, wenn ein Timer-Ereignis eintritt. Implementieren Sie diese Funktion neu, um Timer-Ereignisse abzurufen.

Wenn mehrere Timer laufen, kann die Methode ` QTimerEvent::id()` verwendet werden, um herauszufinden, welcher Timer ausgelöst wurde.

Beispiel:

class MyObject : public QObject
{
    Q_OBJECT

public:
    MyObject(QObject*parent = nullptr);

Q_SIGNALS:
    void valueChanged();

protected:
    void timerEvent(QTimerEvent*event) override;
};

MyObject::MyObject(QObject*parent)
    : QObject(parent)
{
    using namespace std::chrono_literals;

    startTimer(50ms);
    startTimer(5s);
    startTimer(10min);
    startTimer(1h);
}

void MyObject::timerEvent(QTimerEvent*event)
{
    qDebug() << "Timer ID:" << event->id();
}

Beachten Sie, dass die Genauigkeit des Timers vom jeweiligen Betriebssystem und der Hardware abhängt.

Mit dem Argument „ timerType “ können Sie die Genauigkeit des Timers anpassen. Informationen zu den verschiedenen Timer-Typen finden Sie unter Qt::TimerType. Die meisten Plattformen unterstützen eine Genauigkeit von 20 Millisekunden; einige bieten eine höhere Genauigkeit. Wenn Qt die angeforderte Anzahl an Timer-Ereignissen nicht liefern kann, werden einige davon stillschweigend verworfen.

Die Klassen „ QTimer “ und „ QChronoTimer “ bieten eine hochrangige Programmierschnittstelle mit Einmal-Timern und Timer-Signalen anstelle von Ereignissen. Es gibt außerdem die Klasse „ QBasicTimer “, die schlanker ist als „ QChronoTimer “, aber weniger umständlich als die direkte Verwendung von Timer-IDs.

Hinweis: Ab Qt 6.8 lautet der Typ von ` interval ` ` std::chrono::nanoseconds`; zuvor war es ` std::chrono::milliseconds`. Diese Änderung ist abwärtskompatibel mit älteren Versionen von Qt.

Hinweis: In Qt 6.8 wurde „ QObject “ so geändert, dass nun „ Qt::TimerId “ zur Darstellung von Timer-IDs verwendet wird. Diese Methode konvertiert „ TimerId “ aus Gründen der Abwärtskompatibilität in einen „int“-Wert. Sie können jedoch „ Qt::TimerId “ verwenden, um den von dieser Methode zurückgegebenen Wert zu überprüfen, zum Beispiel:

    QObject *obj;
    //...
    const auto id = Qt::TimerId {obj->startTimer(100ms)};
    if (id != Qt::TimerId::Invalid)
    {
        // The timer has been started successfully
    }

Dies ist eine überladene Funktion.

Siehe auch „ timerEvent()“, „ killTimer()“, „ QChronoTimer “ und „ QBasicTimer “.

QThread *QObject::thread() const

Gibt den Thread zurück, in dem sich das Objekt befindet.

Siehe auch ` moveToThread()`.

[virtual protected] void QObject::timerEvent(QTimerEvent *event)

Dieser Ereignis-Handler kann in einer Unterklasse neu implementiert werden, um Timer-Ereignisse für das Objekt zu empfangen.

QChronoTimer bietet übergeordnete Schnittstellen zur Timer-Funktionalität sowie allgemeinere Informationen zu Timern. Das Timer-Ereignis wird im Parameter ` event ` übergeben.

Siehe auch „ startTimer()“, „ killTimer()“ und „ event()“.

[static] QString QObject::tr(const char *sourceText, const char *disambiguation = nullptr, int n = -1)

Gibt eine übersetzte Version von sourceText zurück, optional basierend auf einer Zeichenkette aus disambiguation und dem Wert von n für Zeichenketten, die Pluralformen enthalten; andernfalls wird QString::fromUtf8(sourceText) zurückgegeben, wenn keine passende übersetzte Zeichenkette verfügbar ist.

Beispiel:

void SpreadSheet::setupMenuBar()
{
    QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
    ...

Wenn dieselbe „ sourceText “ in verschiedenen Rollen innerhalb desselben Kontexts verwendet wird, kann eine zusätzliche identifizierende Zeichenfolge in „ disambiguation “ übergeben werden (standardmäßig „nullptr “).

Beispiel:

MyWindow::MyWindow()
{
    QLabel *senderLabel = new QLabel(tr("Name:"));
    QLabel *recipientLabel = new QLabel(tr("Name:", "recipient"));
    ...

Eine ausführliche Beschreibung der Übersetzungsmechanismen von Qt im Allgemeinen finden Sie unter „Quellcode für die Übersetzung schreiben “, Informationen zur Eindeutigkeitsauflösung im Abschnitt „Eindeutigkeit identischer Texte “.

Warnung: Diese Methode ist nur dann reentrant, wenn alle Übersetzer vor dem Aufruf dieser Methode installiert sind. Das Installieren oder Entfernen von Übersetzern während der Durchführung von Übersetzungen wird nicht unterstützt. Dies führt wahrscheinlich zu Abstürzen oder anderem unerwünschten Verhalten.

Siehe auch „ QCoreApplication::translate()“ und „Internationalisierung mit Qt“.

Dokumentation zu Member-Variablen

const QMetaObject QObject::staticMetaObject

Diese Variable speichert das Metaobjekt der Klasse.

Ein Metaobjekt enthält Informationen über eine Klasse, die von ` QObject` erbt, z. B. Klassenname, Name der Oberklasse, Eigenschaften, Signale und Slots. Jede Klasse, die das Makro ` Q_OBJECT ` enthält, verfügt ebenfalls über ein Metaobjekt.

Die Informationen des Metaobjekts werden vom Signal-/Slot-Verbindungsmechanismus und vom Eigenschaftssystem benötigt. Auch die Funktion ` inherits()` nutzt das Metaobjekt.

Wenn Sie einen Zeiger auf ein Objekt haben, können Sie mit ` metaObject()` das diesem Objekt zugeordnete Metaobjekt abrufen.

Beispiel:

QPushButton::staticMetaObject.className();  // returns "QPushButton"

QObject *obj = new QPushButton;
obj->metaObject()->className();             // returns "QPushButton"

Siehe auch ` metaObject()`.

Verwandte Nicht-Mitglieder

QObjectList

Synonym für „ QList “ <QObject *>.

[since 6.8] enum class TimerId

Dies dient zur Darstellung von Timer-IDs (zum Beispiel QTimer und QChronoTimer). Der zugrunde liegende Typ ist int. Mit qToUnderlying() können Sie Qt::TimerId in int konvertieren.

KonstanteWertBeschreibung
QObject::TimerId::Invalid0Stellt eine No-Op-Timer-ID dar; ihre Verwendung hängt vom Kontext ab. Beispielsweise ist dies der Wert, der von ` QObject::startTimer()` zurückgegeben wird, um anzuzeigen, dass der Start eines Timers fehlgeschlagen ist; während ` QChronoTimer::id()` diesen Wert zurückgibt, wenn der Timer inaktiv ist, d. h., ` timer.isActive() ` gibt ` false` zurück.

Diese Enumeration wurde in Qt 6.8 eingeführt.

Siehe auch QTimer::id(), QChronoTimer::id() und QObject::startTimer().

template <typename T> T qobject_cast(QObject *object)

template <typename T> T qobject_cast(const QObject *object)

Gibt das angegebene ` object ` zurück, das in den Typ `T` umgewandelt wurde, sofern das Objekt vom Typ `T` (oder einer Unterklasse) ist; andernfalls wird ` nullptr` zurückgegeben. Wenn ` object ` ` nullptr ` ist, wird außerdem ` nullptr` zurückgegeben.

Die Klasse T muss (direkt oder indirekt) von „ QObject “ erben und mit dem Makro „ Q_OBJECT “ deklariert sein.

Eine Klasse gilt als von sich selbst erbt.

Beispiel:

QObject *obj = new QTimer;          // QTimer inherits QObject

QTimer *timer = qobject_cast<QTimer *>(obj);
// timer == (QObject *)obj

QAbstractButton *button = qobject_cast<QAbstractButton *>(obj);
// button == nullptr

Die Funktion ` qobject_cast()` verhält sich ähnlich wie das Standard-C++-` dynamic_cast()`, mit dem Vorteil, dass sie keine RTTI-Unterstützung erfordert und über die Grenzen dynamischer Bibliotheken hinweg funktioniert.

qobject_cast() kann auch in Verbindung mit Schnittstellen verwendet werden.

Warnung: Wenn T nicht mit dem Makro ` Q_OBJECT ` deklariert ist, ist der Rückgabewert dieser Funktion undefiniert.

Siehe auch „ QObject::inherits()“.

Makro-Dokumentation

[since 6.7] QT_NO_CONTEXTLESS_CONNECT

Durch die Definition dieses Makros wird die Überladung von ` QObject::connect()` deaktiviert, die ein Signal mit einem Funktor verbindet, ohne gleichzeitig ` QObject ` als Empfänger-/Kontext-Objekt anzugeben (d. h. die Überladung von ` QObject::connect()` mit drei Argumenten).

Die Verwendung der kontextlosen Überladung ist fehleranfällig, da es leicht passieren kann, dass Verbindungen zu Funktoren hergestellt werden, die von einem lokalen Zustand der empfangenden Seite abhängen. Wird ein solcher lokaler Zustand zerstört, wird die Verbindung nicht automatisch getrennt.

Zudem handelt es sich bei solchen Verbindungen immer um direkte Verbindungen, was in Multithread-Szenarien zu Problemen führen kann (beispielsweise, wenn das Signal von einem anderen Thread ausgesendet wird).

Dieses Makro wurde in Qt 6.7 eingeführt.

Siehe auch QObject::connect und Qt::ConnectionType.

[since 6.12] QT_NO_DISCONNECT_CONST_CONNECTION

Deaktiviert die Überladung von ` QObject::disconnect()` mit dem Parameter ` const & `, um Aufrufer dazu zu zwingen, nicht-konstante Objekte zu übergeben.

Die Übergabe von nicht-konstanten Objekten wird bevorzugt, da diese sofort zurückgesetzt werden können, wodurch Ressourcen früher freigegeben werden. Verschiedene Qt-Versionen behandeln die `const`-Überladung unterschiedlich. In älteren Qt-Versionen kann der Aufruf der `const`-Überladung mit einer ursprünglich als ` const ` deklarierten `Connection` zu undefiniertem Verhalten führen. Aktuelle Qt-Versionen sind in dieser Hinsicht sicher, aber zukünftige Qt-Versionen könnten die `const`-Überladung entfernen oder die Freigabe von Ressourcen verzögern, bis das `Connection`-Objekt neu zugewiesen oder zerstört wird.

Die Übergabe von nicht-konstanten Objekten vermeidet alle oben genannten Probleme.

Code, der mit diesem Makro kompiliert wird, lässt sich auch ohne aktiviertes Makro kompilieren (und löst kein undefiniertes Verhalten aus) – und zwar in allen Qt-Versionen ab 5.0.

Dieses Makro wurde in Qt 6.12 eingeführt.

QT_NO_NARROWING_CONVERSIONS_IN_CONNECT

Durch die Definition dieses Makros werden Typverengungen und Umwandlungen von Gleitkommazahlen in Ganzzahlen zwischen den von einem Signal übertragenen Argumenten und den von einem Slot akzeptierten Argumenten deaktiviert, wenn das Signal und der Slot mithilfe der PMF-basierten Syntax miteinander verbunden sind.

Siehe auch QObject::connect.

Q_CLASSINFO(Name, Value)

Dieses Makro ordnet der Klasse zusätzliche Informationen zu, die über die Funktion ` QObject::metaObject()` abgerufen werden können. Die zusätzlichen Informationen bestehen aus einer Zeichenkette vom Typ „ Name “ und einer Literalzeichenkette vom Typ „ Value “.

Beispiel:

class MyClass : public QObject
{
    Q_OBJECT
    Q_CLASSINFO("Author", "Pierre Gendron")
    Q_CLASSINFO("URL", "http://www.my-organization.qc.ca")

public:
    //...
};

Qt nutzt das Makro in Qt D-Bus und Qt Qml Modulen. Wenn Sie beispielsweise „ QML Object Types “ in C++ definieren, können Sie eine Eigenschaft als Standard festlegen:

Q_CLASSINFO("DefaultProperty", "content")

Siehe auch „ QMetaObject::classInfo()“, „Verwendung von Qt D-Bus -Adaptern“ und „Definition von QML-Typen aus C++“.

Q_EMIT

Verwenden Sie dieses Makro, um das Schlüsselwort „ emit “ für die Ausgabe von Signalen zu ersetzen, wenn Sie Qt-Signale und -Slots mit einem Signal-/Slot-Mechanismus eines Drittanbieters verwenden möchten.

Das Makro wird normalerweise verwendet, wenn „ no_keywords “ über die Variable „ CONFIG “ in der Datei „ .pro “ angegeben ist, kann aber auch verwendet werden, wenn „ no_keywords “ nicht angegeben ist.

Q_ENUM(...)

Dieses Makro registriert einen Enum-Typ im Metaobjektsystem. Es muss nach der Enum-Deklaration in einer Klasse platziert werden, die das Makro „ Q_OBJECT “, „ Q_GADGET “ oder „ Q_GADGET_EXPORT “ enthält. Für Namespaces verwenden Sie stattdessen „ Q_ENUM_NS()“.

Beispiel:

class MyClass : public QObject
{
    Q_OBJECT

public:
    MyClass(QObject *parent = nullptr);
    ~MyClass();

    enum Priority { High, Low, VeryHigh, VeryLow };
    Q_ENUM(Priority)
    void setPriority(Priority priority);
    Priority priority() const;
};

Bei mit Q_ENUM deklarierten Aufzählungen wird deren „ QMetaEnum “ im umschließenden „ QMetaObject “ registriert. Sie können auch „ QMetaEnum::fromType()“ verwenden, um den „ QMetaEnum “ abzurufen.

Registrierte Aufzählungen werden automatisch auch im Qt-Metatyp-System registriert, wodurch sie „ QMetaType “ bekannt sind, ohne dass „ Q_DECLARE_METATYPE()“ verwendet werden muss. Dies ermöglicht nützliche Funktionen; wenn sie beispielsweise in einem „ QVariant “ verwendet werden, können Sie sie in Zeichenketten konvertieren. Ebenso werden ihre Namen ausgegeben, wenn Sie sie an „ QDebug “ übergeben.

Siehe auch das Qt-Eigenschaftssystem.

Q_ENUM_NS(...)

Dieses Makro registriert einen Enum-Typ im Metaobjektsystem. Es muss nach der Enum-Deklaration in einem Namensraum platziert werden, der das Makro „ Q_NAMESPACE “ enthält. Es entspricht dem Makro „ Q_ENUM “, jedoch innerhalb eines Namensraums.

Für mit `Q_ENUM_NS` deklarierte Aufzählungen wird deren ` QMetaEnum ` im umschließenden ` QMetaObject` registriert. Mit ` QMetaEnum::fromType()` können Sie zudem die ` QMetaEnum` abrufen.

Registrierte Aufzählungen werden automatisch auch im Qt-Metatyp-System registriert, wodurch sie „ QMetaType “ bekannt sind, ohne dass „ Q_DECLARE_METATYPE()“ verwendet werden muss. Dies ermöglicht nützliche Funktionen; wenn sie beispielsweise in einem „ QVariant “ verwendet werden, können Sie sie in Zeichenfolgen konvertieren. Ebenso werden ihre Namen ausgegeben, wenn Sie sie an „ QDebug “ übergeben.

Siehe auch das Qt-Eigenschaftssystem.

Q_FLAG(...)

Dieses Makro registriert eine einzelne „ flags type “ im Metaobjektsystem. Es wird typischerweise in einer Klassendefinition verwendet, um festzulegen, dass Werte einer bestimmten Enumeration als Flags verwendet und mit dem bitweisen OR-Operator kombiniert werden können. Für Namespaces verwenden Sie stattdessen „ Q_FLAG_NS()“.

Das Makro muss nach der Enum-Deklaration platziert werden. Die Deklaration des Flags-Typs erfolgt mithilfe des Makros ` Q_DECLARE_FLAGS()`.

Beispielsweise wird in „ QItemSelectionModel “ das Flag „ SelectionFlags “ wie folgt deklariert:

class Q_CORE_EXPORT QItemSelectionModel : public QObject
{
    Q_OBJECT
    ...
public:

    enum SelectionFlag {
        NoUpdate       = 0x0000,
        Clear          = 0x0001,
        Select         = 0x0002,
        Deselect       = 0x0004,
        Toggle         = 0x0008,
        Current        = 0x0010,
        Rows           = 0x0020,
        Columns        = 0x0040,
        SelectCurrent  = Select | Current,
        ToggleCurrent  = Toggle | Current,
        ClearAndSelect = Clear | Select
    };

    Q_DECLARE_FLAGS(SelectionFlags, SelectionFlag)
    Q_FLAG(SelectionFlags)

};

Hinweis: Das Makro `Q_FLAG` übernimmt die Registrierung einzelner Flag-Werte im Metaobjektsystem, sodass es nicht erforderlich ist, zusätzlich zu diesem Makro ` Q_ENUM()` zu verwenden.

Siehe auch das Qt-Eigenschaftssystem.

Q_FLAG_NS(...)

Dieses Makro registriert eine einzelne „ flags type “ im Metaobjektsystem. Es wird in einem Namensraum verwendet, der das Makro „ Q_NAMESPACE “ enthält, um festzulegen, dass Werte einer bestimmten Enumeration als Flags verwendet und mithilfe des bitweisen OR-Operators kombiniert werden können. Es entspricht dem Makro „ Q_FLAG “, jedoch innerhalb eines Namensraums.

Das Makro muss nach der Enum-Deklaration platziert werden.

Hinweis: Das Makro `Q_FLAG_NS` übernimmt die Registrierung einzelner Flag-Werte beim Metaobjektsystem, sodass es nicht erforderlich ist, zusätzlich zu diesem Makro ` Q_ENUM_NS()` zu verwenden.

Siehe auch das Qt-Eigenschaftssystem.

Q_GADGET

Das Makro `Q_GADGET` ist eine schlankere Version des Makros ` Q_OBJECT ` für Klassen, die nicht von ` QObject ` erben, aber dennoch einige der von ` QMetaObject` angebotenen Reflection-Funktionen nutzen möchten.

Hinweis: Die Makroauswertung endet mit dem Zugriffsspezifizierer „ private “. Wenn Sie Mitglieder unmittelbar nach diesem Makro deklarieren, sind diese ebenfalls privat. Um direkt nach dem Makro öffentliche (oder geschützte) Mitglieder hinzuzufügen, verwenden Sie den Zugriffsspezifizierer „ public: “ (oder „ protected: “).

Q_GADGETs können über ` Q_ENUM`, ` Q_PROPERTY ` und ` Q_INVOKABLE` verfügen, jedoch keine Signale oder Slots.

Q_GADGET stellt ein Klassenmitglied namens „ staticMetaObject “ zur Verfügung. „ staticMetaObject “ ist vom Typ „ QMetaObject “ und bietet Zugriff auf die mit „ Q_ENUM “ deklarierten Enums.

Siehe auch „ Q_GADGET_EXPORT “.

[since 6.3] Q_GADGET_EXPORT(EXPORT_MACRO)

Das Makro `Q_GADGET_EXPORT` funktioniert genau wie das Makro ` Q_GADGET `. Die Variable ` staticMetaObject `, die dabei zur Verfügung gestellt wird (siehe Q_GADGET), wird jedoch mit dem angegebenen Qualifizierer ` EXPORT_MACRO ` deklariert. Dies ist nützlich, wenn das Objekt aus einer dynamischen Bibliothek exportiert werden soll, die umgebende Klasse als Ganzes jedoch nicht (z. B. weil sie größtenteils aus Inline-Funktionen besteht).

Hinweis: Diese Makroauswertung endet mit dem Zugriffsbezeichner „ private “. Wenn Sie Mitglieder unmittelbar nach diesem Makro deklarieren, sind diese Mitglieder ebenfalls privat. Um direkt nach dem Makro öffentliche (oder geschützte) Mitglieder hinzuzufügen, verwenden Sie den Zugriffsbezeichner „ public: “ (oder „ protected: “).

Beispiel:

class Point {
    Q_GADGET_EXPORT(EXPORT_MACRO)
    Q_PROPERTY(int x MEMBER x)
    Q_PROPERTY(int y MEMBER y)
    ~~~

Dieses Makro wurde in Qt 6.3 eingeführt.

Siehe auch „ Q_GADGET “ und „Erstellen von gemeinsam genutzten Bibliotheken“.

Q_INTERFACES(...)

Dieses Makro teilt Qt mit, welche Schnittstellen die Klasse implementiert. Dies wird bei der Implementierung von Plugins verwendet.

Siehe auch Q_DECLARE_INTERFACE(), Q_PLUGIN_METADATA() und „So erstellen Sie Qt-Plugins“.

Q_INVOKABLE

Wenden Sie dieses Makro auf Deklarationen von Mitgliedsfunktionen an, damit diese über das Metaobjektsystem aufgerufen werden können. Das Makro wird vor dem Rückgabetyp geschrieben, wie im folgenden Beispiel gezeigt:

class Window : public QWidget
{
    Q_OBJECT

public:
    Window();
    void normalMethod();
    Q_INVOKABLE void invokableMethod();
};

Die Funktion ` invokableMethod() ` wird mit `Q_INVOKABLE` gekennzeichnet, wodurch sie beim Metaobjektsystem registriert wird und über ` QMetaObject::invokeMethod()` aufgerufen werden kann. Da die Funktion ` normalMethod() ` nicht auf diese Weise registriert ist, kann sie nicht über ` QMetaObject::invokeMethod()` aufgerufen werden.

Wenn eine aufrufbare Mitgliedsfunktion einen Zeiger auf „ QObject “ oder eine Unterklasse von „ QObject “ zurückgibt und aus QML aufgerufen wird, gelten besondere Eigentumsregeln. Weitere Informationen finden Sie unter „Datentypkonvertierung zwischen QML und C++ “.

[since 6.0] Q_MOC_INCLUDE

Das Makro `Q_MOC_INCLUDE` kann innerhalb oder außerhalb einer Klasse verwendet werden und weist den Meta-Object Compiler an, eine Einbindung hinzuzufügen.

// Put this in your code and the generated code will include this header.
Q_MOC_INCLUDE("myheader.h")

Dies ist nützlich, wenn die Typen, die Sie als Eigenschaften oder als Argumente für Signale und Slots verwenden, vorwärts deklariert sind.

Dieses Makro wurde in Qt 6.0 eingeführt.

Q_NAMESPACE

Mit dem Makro „Q_NAMESPACE“ können einem Namensraum „ QMetaObject “-Funktionen hinzugefügt werden.

Q_NAMESPACEs können über „ Q_CLASSINFO “, „ Q_ENUM_NS “ und „ Q_FLAG_NS “ verfügen, jedoch nicht über „ Q_ENUM “, „ Q_FLAG “, „ Q_PROPERTY “, „ Q_INVOKABLE “, Signale oder Slots.

Q_NAMESPACE stellt eine externe Variable, staticMetaObject, zur Verfügung. staticMetaObject ist vom Typ QMetaObject und bietet Zugriff auf die mit Q_ENUM_NS/Q_FLAG_NS deklarierten Enums.

Beispiel:

namespace test {
Q_NAMESPACE
...

Siehe auch Q_NAMESPACE_EXPORT.

Q_NAMESPACE_EXPORT(EXPORT_MACRO)

Mit dem Makro `Q_NAMESPACE_EXPORT` können einem Namensraum „ QMetaObject “-Funktionen hinzugefügt werden.

Es funktioniert genau wie das Makro „ Q_NAMESPACE “. Die externe Variable „ staticMetaObject “, die im Namensraum definiert wird, wird jedoch mit dem angegebenen Qualifizierer „ EXPORT_MACRO “ deklariert. Dies ist nützlich, wenn das Objekt aus einer dynamischen Bibliothek exportiert werden soll.

Beispiel:

namespace test {
Q_NAMESPACE_EXPORT(EXPORT_MACRO)
...

Siehe auch „ Q_NAMESPACE “ und „Erstellen von gemeinsam genutzten Bibliotheken“.

Q_OBJECT

Das Makro `Q_OBJECT` wird verwendet, um Metaobjekt-Funktionen wie dynamische Eigenschaften, Signale und Slots zu aktivieren.

Sie können das Makro Q_OBJECT an beliebiger Stelle in einer Klassendefinition einfügen, die eigene Signale und Slots deklariert oder andere Dienste des Qt-Metaobjektsystems nutzt.

Hinweis: Die Erweiterungdieses Makros endet mit dem Zugriffsspezifizierer „ private:“. Wenn Sie Mitglieder unmittelbar nach diesem Makro deklarieren, sind diese Mitglieder ebenfalls privat. Um öffentliche (oder geschützte) Mitglieder direkt nach dem Makro hinzuzufügen, verwenden Sie den Zugriffsspezifizierer „ public: “ (oder „ protected: “).

Beispiel:

#include <QObject>

class Counter : public QObject
{
    Q_OBJECT

// Note. The Q_OBJECT macro starts a private section.
// To declare public members, use the 'public:' access modifier.
public:
    Counter() { m_value = 0; }

    int value() const { return m_value; }

public slots:
    void setValue(int value);

signals:
    void valueChanged(int newValue);

private:
    int m_value;
};

Hinweis: Dieses Makro setzt voraus, dass die Klasse eine Unterklasse von ` QObject` ist. Verwenden Sie ` Q_GADGET ` oder ` Q_GADGET_EXPORT ` anstelle von `Q_OBJECT`, um die Unterstützung des Metaobjektsystems für Enums in einer Klasse zu aktivieren, die keine Unterklasse von ` QObject ` ist.

Siehe auch „Metaobjektsystem“, „Signale und Slots“ sowie „Das Eigenschaftssystem von Qt“.

Q_PROPERTY(...)

Dieses Makro dient zur Deklaration von Eigenschaften in Klassen, die von ` QObject` erben. Eigenschaften verhalten sich wie Klassendatenelemente, verfügen jedoch über zusätzliche Funktionen, auf die über das Metaobjektsystem zugegriffen werden kann.

Q_PROPERTY(type name
           (READ getFunction [WRITE setFunction] |
            MEMBER memberName [(READ getFunction | WRITE setFunction)])
           [RESET resetFunction]
           [NOTIFY notifySignal]
           [REVISION int | REVISION(int[, int])]
           [DESIGNABLE bool]
           [SCRIPTABLE bool]
           [STORED bool]
           [USER bool]
           [BINDABLE bindableProperty]
           [CONSTANT]
           [FINAL]
           [VIRTUAL]
           [OVERRIDE]
           [REQUIRED])

Der Name und der Typ der Eigenschaft sowie die Funktion ` READ ` sind erforderlich. Der Typ kann ein beliebiger, von ` QVariant` unterstützter Typ oder ein benutzerdefinierter Typ sein. Die übrigen Angaben sind optional, jedoch ist eine Funktion ` WRITE ` üblich. Die Attribute sind standardmäßig auf `true` gesetzt, mit Ausnahme von ` USER`, das standardmäßig auf `false` gesetzt ist.

Beispiel:

Q_PROPERTY(QString title READ title WRITE setTitle USER true)

Weitere Informationen zur Verwendung dieses Makros sowie ein ausführlicheres Anwendungsbeispiel finden Sie in der Erläuterung zum Qt-Eigenschaftssystem.

Siehe auch das Qt-Eigenschaftssystem.

Q_REVISION

Wenden Sie dieses Makro auf Deklarationen von Mitgliedsfunktionen an, um diese im Metaobjektsystem mit einer Revisionsnummer zu kennzeichnen. Das Makro wird vor dem Rückgabetyp geschrieben, wie im folgenden Beispiel gezeigt:

class Window : public QWidget
{
    Q_OBJECT
    Q_PROPERTY(int normalProperty READ normalProperty)
    Q_PROPERTY(int newProperty READ newProperty REVISION(2, 1))

public:
    Window();
    int normalProperty();
    int newProperty();
public slots:
    void normalMethod();
    Q_REVISION(2, 1) void newMethod();
};

Dies ist nützlich, wenn Sie das Metaobjektsystem verwenden, um Objekte dynamisch für eine andere API verfügbar zu machen, da Sie so die von verschiedenen Versionen der anderen API erwartete Version berücksichtigen können. Betrachten Sie das folgende vereinfachte Beispiel:

    Window window;
    int expectedRevision = 0;
    const QMetaObject *windowMetaObject = window.metaObject();
    for (int i=0; i < windowMetaObject->methodCount(); i++)
        if (windowMetaObject->method(i).revision() <= expectedRevision)
            exposeMethod(windowMetaObject->method(i));
    for (int i=0; i < windowMetaObject->propertyCount(); i++)
        if (windowMetaObject->property(i).revision() <= expectedRevision)
            exposeProperty(windowMetaObject->property(i));

Bei Verwendung derselben `Window`-Klasse wie im vorherigen Beispiel würden `newProperty` und `newMethod` in diesem Code nur dann verfügbar sein, wenn die erwartete Version ` 2.1 ` oder höher ist.

Da alle Methoden als zur Revision „ 0 “ gehörend betrachtet werden, wenn sie nicht mit einem Tag versehen sind, ist ein Tag wie „ Q_REVISION(0) “ oder „ Q_REVISION(0, 0) “ ungültig und wird ignoriert.

Sie können einen oder zwei ganzzahlige Parameter an ` Q_REVISION` übergeben. Wenn Sie einen Parameter übergeben, bezeichnet dieser nur die Nebenversion. Das bedeutet, dass die Hauptversion nicht angegeben ist. Wenn Sie zwei Parameter übergeben, ist der erste Parameter die Hauptversion und der zweite Parameter die Nebenversion.

Dieses Tag wird vom Metaobjektsystem selbst nicht verwendet. Derzeit wird es nur vom Modul „ QtQml “ verwendet.

Für ein allgemeineres String-Tag siehe QMetaMethod::tag()

Siehe auch ` QMetaMethod::revision()`.

Q_SET_OBJECT_NAME(Object)

Dieses Makro weist „ Object “ dem „Objekt“ „ objectName “ zu.

Es spielt keine Rolle, ob „ Object “ ein Zeiger ist oder nicht – das Makro erkennt dies selbstständig.

Siehe auch ` QObject::objectName()`.

Q_SIGNAL

Dies ist ein zusätzliches Makro, mit dem Sie eine einzelne Funktion als Signal kennzeichnen können. Es kann sehr nützlich sein, insbesondere wenn Sie einen Quellcode-Parser eines Drittanbieters verwenden, der die Gruppen „ signals “ oder „ Q_SIGNALS “ nicht versteht.

Verwenden Sie dieses Makro, um das Schlüsselwort „ signals “ in Klassendeklarationen zu ersetzen, wenn Sie Qt-Signale und -Slots mit einem Signal-/Slot-Mechanismus eines Drittanbieters nutzen möchten.

Das Makro wird normalerweise verwendet, wenn „ no_keywords “ zusammen mit der Variablen „ CONFIG “ in der Datei „ .pro “ angegeben ist, kann aber auch verwendet werden, wenn „ no_keywords “ nicht angegeben ist.

Q_SIGNALS

Verwenden Sie dieses Makro, um das Schlüsselwort „ signals “ in Klassendeklarationen zu ersetzen, wenn Sie Qt-Signale und -Slots mit einem Signal-/Slot-Mechanismus eines Drittanbieters verwenden möchten.

Das Makro wird normalerweise verwendet, wenn „ no_keywords “ über die Variable „ CONFIG “ in der Datei „ .pro “ festgelegt ist, kann aber auch verwendet werden, wenn „ no_keywords “ nicht festgelegt ist.

Q_SLOT

Dies ist ein zusätzliches Makro, mit dem Sie eine einzelne Funktion als Slot kennzeichnen können. Es kann sehr nützlich sein, insbesondere wenn Sie einen Quellcode-Parser eines Drittanbieters verwenden, der die Gruppen „ slots “ oder „ Q_SLOTS “ nicht versteht.

Verwenden Sie dieses Makro, um das Schlüsselwort „ slots “ in Klassendeklarationen zu ersetzen, wenn Sie Qt-Signale und -Slots mit einem Signal-/Slot-Mechanismus eines Drittanbieters nutzen möchten.

Das Makro wird normalerweise verwendet, wenn „ no_keywords “ mit der Variablen „ CONFIG “ in der Datei „ .pro “ angegeben ist, kann aber auch verwendet werden, wenn „ no_keywords “ nicht angegeben ist.

Q_SLOTS

Verwenden Sie dieses Makro, um das Schlüsselwort „ slots “ in Klassendeklarationen zu ersetzen, wenn Sie Qt-Signale und -Slots mit einem Signal-/Slot-Mechanismus eines Drittanbieters verwenden möchten.

Das Makro wird normalerweise verwendet, wenn „ no_keywords “ über die Variable „ CONFIG “ in der Datei „ .pro “ festgelegt ist, kann aber auch verwendet werden, wenn „ no_keywords “ nicht angegeben ist.

© 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.