QSignalBlocker Class

Ausnahmesicherer Wrapper um QObject::blockSignals(). Mehr...

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

Hinweis: Alle Funktionen in 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)

Detaillierte Beschreibung

QSignalBlocker kann überall dort eingesetzt werden, wo man sonst ein Paar Aufrufe von blockSignals() verwenden würde. Er blockiert Signale in seinem Konstruktor und setzt im Destruktor den Zustand zurück, der vor der Ausführung des Konstruktors herrschte.

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

ist also äquivalent zu

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

mit der Ausnahme, dass der Code, der QSignalBlocker verwendet, angesichts von Ausnahmen sicher ist.

Siehe auch QMutexLocker und QEventLoopLocker.

Dokumentation der Mitgliedsfunktionen

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

Konstrukteur. Ruft object->blockSignals(true) auf.

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

Dies ist eine überladene Funktion.

Ruft object.blockSignals(true) auf.

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

Move-konstruiert einen Signalblocker aus other. other hat einen No-Op-Destruktor, während die Verantwortung für die Wiederherstellung des QObject::signalsBlocked()-Zustands auf das neue Objekt übertragen wird.

[noexcept] QSignalBlocker::~QSignalBlocker()

Destruktor. Stellt den Zustand von QObject::signalsBlocked() wieder her, wie er vor der Ausführung des Konstruktors war, es sei denn, unblock() wurde ohne nachfolgende reblock() aufgerufen; in diesem Fall geschieht nichts.

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

Verabschiedet die QSignalBlocker. Sie greift nicht mehr auf die QObject zu, die an ihren Konstruktor übergeben wurde. unblock(), reblock(), sowie ~QSignalBlocker() haben keine Wirkung.

Diese Funktion wurde in Qt 6.7 eingeführt.

[noexcept] void QSignalBlocker::reblock()

Sperrt Signale nach einem vorherigen unblock() erneut.

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

[noexcept] void QSignalBlocker::unblock()

Stellt vorübergehend den Zustand von QObject::signalsBlocked() wieder her, wie er vor der Ausführung des Konstruktors von QSignalBlocker war. Zum Rückgängigmachen, verwenden Sie reblock().

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

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

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

Die Signale des Objekts, die dieser Signalblocker vor dem Verschieben blockiert hat, werden freigegeben, es sei denn, beide Instanzen blockieren die Signale desselben Objekts und *this ist zum Zeitpunkt des Verschiebens freigegeben, während other nicht gesperrt ist.

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