이 페이지에서

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 는 차단된 상태인 경우를 제외하고는 차단 해제됩니다.

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