QSignalBlocker 类

QObject::blockSignals 的封装中提供异常安全。 更多信息...

头文件 #include <QSignalBlocker>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core

注意: 本类中的所有函数都是 可重入的

公共函数

QSignalBlocker(QObject *object)
QSignalBlocker(QObject &object)
QSignalBlocker(QSignalBlocker &&other)
~QSignalBlocker()
(自 6.7) voiddismiss()
voidreblock()
voidunblock()
QSignalBlocker &operator=(QSignalBlocker &&other)

详细描述

QSignalBlocker 可以用于任何你可能使用 blockSignals() 调对的地方。它在构造函数中阻止信号,在析构函数中将状态重置为构造函数运行之前的状态。

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

因此等价于

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

但是使用 QSignalBlocker 的代码在异常情况下是安全的。

参见QMutexLockerQEventLoopLocker

成员函数说明

[显式 noexcept] QSignalBlocker::QSignalBlocker(QObject *object)

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

[显式 noexcept] QSignalBlocker::QSignalBlocker(QObject &object)

这是一个重载函数。

调用 object.blockSignals(true)。

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

other 中构造一个信号拦截器。 other 将有一个无操作析构函数,而恢复 QObject::signalsBlocked() 状态的责任转移到新对象。

[noexcept] QSignalBlocker::~QSignalBlocker()

析构函数。恢复 QObject::signalsBlocked() 状态为构造函数运行之前的状态,除非在调用 unblock() 后未调用 reblock(),在这种情况下不进行任何操作。

[无except,自6.7版本起] void QSignalBlocker::dismiss()

取消QSignalBlocker 的使用。它将不再访问通过构造函数传入的 QObject。函数 unblock(),reblock() 以及 ~QSignalBlocker() 将没有任何效果。

此功能自 Qt 6.7 版本引入。

[无except] void QSignalBlocker::reblock()

在之前的 unblock() 之后重新阻止信号。

reblock() 和 unblock() 调用的次数不会被计算,因此每个 reblock() 都会撤销任意数量的 unblock() 调用。

[无except] void QSignalBlocker::unblock()

临时恢复此 QSignalBlocker 的构造函数运行之前的 QObject::signalsBlocked() 状态。要撤销,请使用 reblock()。

reblock() 和 unblock() 调用的次数不会被计算,因此每个 unblock() 都会撤销任意数量的 reblock() 调用。

[无except] QSignalBlocker &QSignalBlocker::operator=(QSignalBlocker &&other)

将从 other 移动信号阻止器。 other 将有一个无操作的析构函数,而恢复 QObject::signalsBlocked() 状态的责任将转移到此对象。

如果有的话,此前被此信号阻止器阻止的该对象的声音在移动之前已被取消阻止在此移动发生时,同时两个实例都阻止同一个对象的声音,而 *this 被取消阻止,而 other 没有取消阻止的情况。

© 2024 Qt 公司有限。包含在此处的文档贡献是各自所有者的版权。本提供的文档是根据自由软件基金会的发布版本 1.3 的 GNU 自由文档许可证 许可的。Qt 及相应的标志是芬兰以及/或全球其他国家的 Qt 公司的商标。所有其他商标均为各自所有者的财产。