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() を 2 回呼び出す場面で、その代わりに使用できます。このクラスは、コンストラクタ内でシグナルをブロックし、デストラクタ内で状態をコンストラクタの実行前の状態に戻します。
{
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.