Sur cette page

QSignalBlocker Class

Enveloppe résiliente aux exceptions autour de la fonction ` QObject::blockSignals()`. En savoir plus...

En-tête : #include <QSignalBlocker>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core

Remarque : toutes les fonctions de cette classe sont réentrantes.

Fonctions publiques

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

Description détaillée

QSignalBlocker peut être utilisé partout où vous utiliseriez autrement une paire d'appels à QObject::blockSignals(). Il bloque les signaux dans son constructeur et, dans le destructeur, il rétablit l'état tel qu'il était avant l'exécution du constructeur.

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

est donc équivalent à

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

à la différence près que le code utilisant QSignalBlocker est sûr en cas d’exception.

Voir également QMutexLocker et QEventLoopLocker.

Documentation des fonctions membres

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

Constructeur. Appelle object->blockSignals(true).

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

Appelle object.blockSignals(true).

Il s'agit d'une fonction surchargée.

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

Cette fonction construit un bloqueur de signal à partir de ` other`. ` other ` disposera d'un destructeur sans effet, tandis que la responsabilité de rétablir l'état de ` QObject::signalsBlocked()` sera transférée au nouvel objet.

[noexcept] QSignalBlocker::~QSignalBlocker()

Destructeur. Rétablit l'état de ` QObject::signalsBlocked()` tel qu'il était avant l'exécution du constructeur, sauf si ` unblock()` a été appelé sans être suivi de ` reblock()`, auquel cas il ne fait rien.

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

Supprime l'QSignalBlocker. Elle n'aura plus accès à l'QObject transmise à son constructeur. Les méthodes unblock(), reblock(), ainsi que ~QSignalBlocker() n'auront plus aucun effet.

Cette fonction a été introduite dans Qt 6.7.

[noexcept] void QSignalBlocker::reblock()

Réinitialise le blocage des signaux après un appel précédent à ` unblock()`.

Le nombre d'appels à reblock() et à unblock() n'est pas comptabilisé ; ainsi, chaque appel à reblock() annule un nombre indéfini d'appels à unblock().

[noexcept] void QSignalBlocker::unblock()

Rétablit temporairement l'état de ` QObject::signalsBlocked()` tel qu'il était avant l'exécution du constructeur de ` QSignalBlocker`. Pour annuler cette opération, utilisez ` reblock()`.

Le nombre d’appels à reblock() et à unblock() n’est pas comptabilisé ; ainsi, chaque appel à unblock() annule un nombre indéfini d’appels à reblock().

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

Déplace et attribue ce bloqueur de signaux depuis other. other disposera d’un destructeur sans effet, tandis que la responsabilité de restaurer l’état de QObject::signalsBlocked() est transférée à cet objet.

Les signaux de l’objet que ce bloqueur de signaux bloquait avant d’être déplacé vers cet objet, s’il y en a, sont débloqués, sauf dans le cas où les deux instances bloquent les signaux du même objet et où *this est débloqué alors que other ne l’est pas, au moment du déplacement.

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