3 つの QSpinBoxes (座標など) を保持する QWidget 派生クラスを取得しました。valueChanged()
信号は接続され、少なくとも次の 3 つのケースで発信されます。
- 上下ボタン
- 手入力番号
setValue()
ただし、を使用する場合setValue()
、(3 つの) シグナルを使用したくないため、シグナルを抑制します。私の理解では、これを処理するには2つの方法があります。
QObject::blockSignals()
- 値が明示的に設定されたかどうかを示すフラグを使用する
どちらのバリアントも機能しますが、まったく簡単ではないと思います。最初のバリアントでは、通常、すべてのシグナルをブロックしblockSignals(true)
、すべての基になるウィジェットを設定する必要があります (blockSignals はアプリケーションの子 QObject をブロックしません)。2 つ目については、すべての更新メソッドでフラグを照会する必要があり、シグナルは必要ありませんが発生します。
そのような動作を防ぐ一般的な設計パターンはありますか? そうでない場合、どのバリアントが好みですか?