Auf dieser Seite

QSignalBlocker Class

Ausnahmensicherer Wrapper für ` QObject::blockSignals()` (). Mehr...

Header: #include <QSignalBlocker>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

Hinweis: Alle Funktionen dieser Klasse sind reentrant.

Öffentliche Funktionen

QSignalBlocker(QObject *object)
QSignalBlocker(QObject &object)
QSignalBlocker(QSignalBlocker &&other)
~QSignalBlocker()
(since 6.7) void dismiss()
void reblock()
void unblock()
QSignalBlocker &operator=(QSignalBlocker &&other)

Ausführliche Beschreibung

QSignalBlocker kann überall dort verwendet werden, wo Sie andernfalls zwei Aufrufe von ` QObject::blockSignals()` verwenden würden. Es blockiert Signale in seinem Konstruktor und setzt im Destruktor den Zustand auf den Stand zurück, der vor der Ausführung des Konstruktors herrschte.

{
    const QSignalBlocker blocker(someQObject);
    // no signals here
}

ist somit gleichbedeutend mit

const bool wasBlocked = someQObject->blockSignals(true);
// no signals here
someQObject->blockSignals(wasBlocked);

mit dem Unterschied, dass der Code, der QSignalBlocker verwendet, auch bei Ausnahmen sicher ist.

Siehe auch „ QMutexLocker “ und „ QEventLoopLocker “.

Dokumentation zu Mitgliedsfunktionen

[explicit noexcept] QSignalBlocker::QSignalBlocker(QObject *object)

Konstruktor. Ruft „ object “ -> „blockSignals(true)“ auf.

[explicit noexcept] QSignalBlocker::QSignalBlocker(QObject &object)

Ruft „ object.blockSignals(true)“ auf.

Dies ist eine überladene Funktion.

[noexcept] QSignalBlocker::QSignalBlocker(QSignalBlocker &&other)

Erstellt einen Signalblocker anhand von ` other`. ` other ` verfügt über einen No-Op-Destruktor, während die Verantwortung für die Wiederherstellung des Zustands von ` QObject::signalsBlocked()` auf das neue Objekt übertragen wird.

[noexcept] QSignalBlocker::~QSignalBlocker()

Destruktor. Stellt den Zustand von ` QObject::signalsBlocked()` so wieder her, wie er vor der Ausführung des Konstruktors war, es sei denn, ` unblock()` wurde ohne anschließendes ` reblock()` aufgerufen; in diesem Fall führt er keine Aktion aus.

[noexcept, since 6.7] void QSignalBlocker::dismiss()

Beendet die Instanz von „ QSignalBlocker “. Es wird kein Zugriff mehr auf die an den Konstruktor übergebene Instanz von „ QObject “ erfolgen. Die Methoden „ unblock()“, „ reblock()“ sowie „~QSignalBlocker()“ haben keine Wirkung mehr.

Diese Funktion wurde in Qt 6.7 eingeführt.

[noexcept] void QSignalBlocker::reblock()

Setzt die Signalverarbeitung nach einem vorherigen Aufruf von ` unblock()` zurück.

Die Anzahl der Aufrufe von `reblock()` und ` unblock()` wird nicht gezählt, daher macht jeder Aufruf von `reblock()` eine beliebige Anzahl von Aufrufen von ` unblock()` rückgängig.

[noexcept] void QSignalBlocker::unblock()

Stellt vorübergehend den Zustand von ` QObject::signalsBlocked()` so wieder her, wie er vor der Ausführung des Konstruktors von ` QSignalBlocker` war. Um dies rückgängig zu machen, verwenden Sie ` reblock()`.

Die Anzahl der Aufrufe von reblock() und unblock() wird nicht gezählt, sodass jeder Aufruf von unblock() eine beliebige Anzahl von reblock()-Aufrufen rückgängig macht.

[noexcept] QSignalBlocker &QSignalBlocker::operator=(QSignalBlocker &&other)

Verschiebt und weist diesen Signalblocker von other zu. other verfügt über einen No-Op-Destruktor, während die Verantwortung für die Wiederherstellung des Zustands von QObject::signalsBlocked() auf dieses Objekt übertragen wird.

Die Signale des Objekts, die dieser Signalblocker vor der Verschiebung blockierte (sofern vorhanden), werden freigegeben, außer in dem Fall, dass beide Instanzen die Signale desselben Objekts blockieren und *this zum Zeitpunkt der Verschiebung freigegeben ist, während other dies nicht 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.