QSignalBlocker Class
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() | |
(since 6.7) void | dismiss() |
void | reblock() |
void | unblock() |
QSignalBlocker & | operator=(QSignalBlocker &&other) |
详细说明
QSignalBlocker 可用于调用QObject::blockSignals() 的任何地方。它在构造函数中阻塞信号,在析构函数中将状态重置为构造函数运行前的状态。
{ const QSignalBlocker blocker(someQObject); // no signals here }
因此
const bool wasBlocked = someQObject->blockSignals(true); // no signals here someQObject->blockSignals(wasBlocked);
但使用 QSignalBlocker 的代码在面对异常时是安全的。
另请参阅 QMutexLocker 和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 将有一个无操作的析构函数,而恢复QObject::signalsBlocked() 状态的责任将转移到新对象。
[noexcept]
QSignalBlocker::~QSignalBlocker()
销毁器。将QObject::signalsBlocked() 恢复到构造函数运行前的状态,除非调用了unblock() 而没有调用reblock() ,否则不做任何操作。
[noexcept, since 6.7]
void QSignalBlocker::dismiss()
解散QSignalBlocker 。它将不再访问传递给其构造函数的QObject 。unblock()、reblock() 以及 ~QSignalBlocker() 将不起作用。
此函数在 Qt 6.7 中引入。
[noexcept]
void QSignalBlocker::reblock()
在之前的unblock() 之后重新阻断信号。
reblock() 和unblock() 的调用次数不会计算在内,因此每次 reblock() 都会撤销任何次数的unblock() 调用。
[noexcept]
void QSignalBlocker::unblock()
将QObject::signalsBlocked() 暂时恢复到QSignalBlocker 的构造函数运行之前的状态。要撤销,请使用reblock() 。
reblock() 和 unblock() 的调用次数不会计算在内,因此每次 unblock() 都会撤销任意次数的reblock() 调用。
[noexcept]
QSignalBlocker &QSignalBlocker::operator=(QSignalBlocker &&other)
移动将此信号屏蔽器从other 指定。other 将有一个无操作的析构函数,而恢复QObject::signalsBlocked() 状态的责任将转移到此对象。
该信号屏蔽程序在被移动之前屏蔽的对象信号(如果有)将被解除屏蔽,除非两个实例屏蔽了同一对象的信号,并且在移动时*this
被解除屏蔽,而other 未被解除屏蔽。
© 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.