QSignalBlocker 类

异常安全包裹器围绕 QObject::blockSignals (). 更多...

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

注意: 此类的所有函数 可重入 .

公共函数

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

详细描述

QSignalBlocker can be used wherever you would otherwise use a pair of calls to blockSignals(). It blocks signals in its constructor and in the destructor it resets the state to what it was before the constructor ran.

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

因此相当于

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

except the code using QSignalBlocker is safe in the face of exceptions.

另请参阅 QMutexLocker and QEventLoopLocker .

成员函数文档编制

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

构造函数。调用 object ->blockSignals(true).

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

这是重载函数。

调用 object .blockSignals(true).

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

移动构造信号阻塞器自 other . other will have a no-op destructor, while responsibility for restoring the QObject::signalsBlocked () state is transferred to the new object.

[noexcept] QSignalBlocker:: ~QSignalBlocker ()

析构函数。还原 QObject::signalsBlocked () state to what it was before the constructor ran, unless unblock () has been called without a following reblock (), in which case it does nothing.

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

Dismisses the QSignalBlocker . It will no longer access the QObject passed to its constructor. unblock (), reblock (), as well as ~ QSignalBlocker () 没有起作用。

该函数在 Qt 6.7 引入。

[noexcept] void QSignalBlocker:: reblock ()

重新阻塞之后信号,基于先前 unblock ().

The numbers of reblock() and unblock () calls are not counted, so every reblock() undoes any number of unblock () 调用。

[noexcept] void QSignalBlocker:: unblock ()

Temporarily restores the QObject::signalsBlocked () state to what it was before this QSignalBlocker 's constructor ran. To undo, use reblock ().

The numbers of reblock () and unblock() calls are not counted, so every unblock() undoes any number of reblock () 调用。

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

Move-assigns this signal blocker from other . other will have a no-op destructor, while responsibility for restoring the QObject::signalsBlocked () state is transferred to this object.

The object's signals this signal blocker was blocking prior to being moved to, if any, are unblocked except in the case where both instances block the same object's signals and *this is unblocked while other is not, at the time of the move.