2

QtGraphicsViewフレームワークを使用するプログラムを作成しています。他のクラス(または他のサブクラス)QGraphicsItemを含むクラスにサブクラス化しました。QGraphicsItemこのクラスは、含まれているQGraphicsItem;の親です。アイデアは、複合オブジェクトを操作することです。

ドキュメントから、それは私が達成しようとしていることの矛盾のようです:

  • 呼び出すignore()mousePressEvent、オブジェクトが移動できなくなります。動かしたい。
  • 呼び出すとaccept()mousePressEventイベントが子オブジェクトに伝播されなくなります。一部の子オブジェクトは、マウスイベントに反応する必要があります。

どうすればこれを機能させることができますか?

4

3 に答える 3

2

ドキュメントの解釈が間違っていると思います。

呼び出すignore()mousePressEvent、オブジェクトが動かなくなります。

私はそれが真実だとは思いません。私にとって、呼び出しignore()はオブジェクトが「このイベントを評価しました。このイベントに応じて必要なすべてのアクションを実行しました。また、それは私向けではないと判断したため、転送します」と言っているように見えます。私の下にある次のオブジェクトに」。ignore イベントがQGraphicsItem::ItemIsMovableフラグの設定を解除することを示唆するものは何も見つかりません (これは QGraphicsItem が可動かどうかを決定するものです)。

オブジェクトと イベントを移動できなかった理由はわかりませんがignore()、これは賢明なアプローチではないことをお勧めします(ほとんどの場合、明らかに原因がある可能性があります)。

呼び出すとaccept()mousePressEventイベントが子オブジェクトに伝播されなくなります。

これは本当だと思いますが、親はまだ子を変更できます。私の理解ではaccept()、「私はこのイベントを評価しました。私はこのイベントに応じて必要なすべてのアクションを実行しました (これには私の子供の変更が含まれる場合があります)。私はまた、イベントが私のためのものであると判断しました。そのため、イベントを引き継ぐことはありません。」

于 2012-03-02T13:09:00.140 に答える
0

QCoreApplication::postEvent(child, mouseEvent)子オブジェクトに送信します。

于 2016-04-23T23:02:03.960 に答える
0

親の QGraphicsItem で、次のことを試みることができます。

MyObject::mousePressEvent ( QGraphicsSceneMouseEvent * event )
{
    QGraphicsItem::mousePressEvent(event);
    event->ignore();
}

これにより、マウス イベントの通常の処理 (つまり、オブジェクトを移動可能にする) が可能になりますが、無視されて伝播されます。

ただし、親と子が同じマウス イベントに応答すると、副作用のリスクが高くなるため、ロジックをより堅牢にする必要があります。

于 2012-03-02T13:10:42.963 に答える