私のGuiでは、次のシステムを使用します。 動作方法は、マウスの下のウィジェットがマウスまたはkbイベントを消費しない場合、消費されるかデスクトップに到達するまで、ウィジェットの親に渡されます。
一つだけ、それについて私を困惑させます。 それは、何らかの理由でボタンがその子の1つとしてラベルを持っている場合を意味します。ラベルをクリックしても、ラベルの下にあるボタンがクリックされるという意味ではありません(ラベルはマウスを消費しないため)。この場合、これは望ましくありません。つまり、if(mouseEvent.source == this){do button stuff}を実行する必要があるということですか?
ありがとう
回答:
回答№1は0ラベルが子ウィジェットである場合、はい、ラベルはイベントを食べようとし、失敗し(通常、ラベルにはハンドラーメソッドがないため)、イベントをボタンに戻します。
これを行う最も簡単な方法はチャンスですLabelクラスのサブクラスを派生させ、ハンドル関数をオーバーライドします(これがツールキットで可能であると仮定します-これは適切なツールキットにある必要があります)。その後、ハンドル関数を使用してマウスクリックをキャプチャし、他のイベントをボタンに戻すことができます。
ポインタを比較することはおそらく悪い考えであり、ツールキットの実装方法にわずかに依存します。たとえば、ソースをラベルではなくボタンと見なす場合があります(これは「期待どおり」であるため)。
ラベルがそれ自体がウィジェットであるということは非常に奇妙だと思いますが.....
回答№2の場合は0
マウスイベントを消費する特別な種類の「ラベル」が必要なようです。この特定の場合にマウスイベントを消費するカスタマイズされたウィジェット(Labelから派生)を作成できるはずです。
そのラベルウィジェットがサードパーティのものである場合派生/サブクラス化することはできません。別のウィジェットでラベルをラップする必要があります。マウスイベントを消費し、元のラベルである子を1つだけ持つ単純なウィジェットです。