Класс QSignalBlocker
Безопасная по отношению к исключениям оболочка вокруг QObject::blockSignals(). Подробнее...
| Заголовок: | #include <QSignalBlocker> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| С момента: | Qt 5.3 |
Примечание: Все функции в этом классе являются реентерабельными.
Открытые функции
| QSignalBlocker(QSignalBlocker &&other) | |
| QSignalBlocker(QObject &object) | |
| QSignalBlocker(QObject *object) | |
| QSignalBlocker & | operator=(QSignalBlocker &&other) |
| ~QSignalBlocker() | |
| void | reblock() |
| void | unblock() |
Подробное описание
QSignalBlocker можно использовать всякий раз, когда вам нужно выполнить пару вызовов blockSignals(). Он блокирует сигналы в конструкторе и в деструкторе восстанавливает состояние до того, как был вызван конструктор.
{
const QSignalBlocker blocker(someQObject);
// no signals here
} эквивалентно
const bool wasBlocked = someQObject->blockSignals(true); // no signals here someQObject->blockSignals(wasBlocked);
за исключением того, что код, использующий QSignalBlocker, безопасен при возникновении исключений.
См. также QMutexLocker и QEventLoopLocker.
Документация по членам-функциям
QSignalBlocker::QSignalBlocker(QSignalBlocker &&other)
Создаёт копию блока сигнала из other при помощи перемещения. У other будет деструктор с бездействием, в то время как ответственность за восстановление состояния QObject::signalsBlocked() передаётся новому объекту.
QSignalBlocker::QSignalBlocker(QObject &object)
Это перегруженная функция.
Вызывает object.blockSignals(true).
QSignalBlocker::QSignalBlocker(QObject *object)
Конструктор. Вызывает object->blockSignals(true).
QSignalBlocker &QSignalBlocker::operator=(QSignalBlocker &&other)
Присваивает текущему блоку сигнала содержимое other при помощи перемещения. У other будет деструктор с бездействием, в то время как ответственность за восстановление состояния QObject::signalsBlocked() передаётся текущему объекту.
Сигналы объекта, которые блокировались этим блоком сигнала до перемещения, если таковые имеются, разблокируются, за исключением случая, когда оба экземпляра блокируют сигналы одного и того же объекта и *this разблокирован, в то время как other нет, на момент перемещения.
QSignalBlocker::~QSignalBlocker()
Деструктор. Восстанавливает состояние QObject::signalsBlocked() до того, как был вызван конструктор, за исключением случаев, когда unblock() был вызван без последующего вызова reblock(), в этом случае ничего не происходит.
void QSignalBlocker::reblock()
Блокирует сигналы после предыдущего вызова unblock().
Количество вызовов reblock() и unblock() не учитывается, поэтому каждый вызов reblock() отменяет любое количество вызовов unblock().
void QSignalBlocker::unblock()
Временно восстанавливает состояние QObject::signalsBlocked() до состояния, которое существовало до запуска конструктора этого QSignalBlocker. Для отмены используйте reblock().
Количество вызовов reblock() и unblock() не учитывается, поэтому каждый вызов unblock() отменяет любое количество вызовов reblock().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qsignalblocker.html