1

Qt で UI を作成していますが、存在する場合と存在しない場合がある 2 つの要素があります。さらに、それらの親も異なる要素です。ただし、一方が他方に影響を与えます。

最良の方法でシグナル/スロットをどのように構成する必要がありますか (または、そのパターンを使用しないでください)。

頭に浮かぶ方法はすべてハックのようです。

  • すべての親にシグナル/スロットを作成し、シグナルを上に渡してから下に戻します
  • 両方の最も近い共通の親にシグナル/スロットを作成し、子にシグナル/スロットを親に接続させます
  • 一方の作成時に、もう一方の構造をナビゲートして要素を取得し、シグナル/スロットを直接接続します。ここでのガイダンスは大歓迎です。

編集:「present」は、要素を作成してレイアウトに追加するためにユーザーが押すことができるボタンがあることを意味します。したがって、ボタンを押す組み合わせによって、要素が存在する場合と存在しない場合があります。

「影響」とは、その状態が変化することを意味します。たとえば、アイテムのリストと、要素をリストに追加するボタンが別の場所にあります。

例として、todo リストを含むタブ付きペインを想像してください。リストにアイテムを追加するタブ付きペインにはないボタンがあります。タブ付きペインは、ペインのすべての要素を作成するわけではありません。表示されているペインの要素のみを作成し、ペインが切り替えられるとそれらを削除します。したがって、リストが存在する場合と存在しない場合があります。

4

1 に答える 1

1

UI 要素は QWidgets です。すべての QWidget は QObject です。QObject のシグナルは、他のオブジェクトのスロットに connect() できます。親子関係の階層はまったく重要ではありません

シグナルスロット接続とイベントを混同しているようです。実際には、特定のオブジェクトによって無視されたままになっている場合、オブジェクト階層を通過する可能性があります。

QObjects が破棄されても、シグナルスロット接続は安全であることも注目に値します。信号またはスロットが接続されたオブジェクトが破棄されると、接続は安全に切断されます。あなたができない唯一のことは、スロット内の送信者または受信者オブジェクトを削除することです-object->deleteLater()代わりに使用してください。

于 2013-09-26T02:14:44.253 に答える