3

私はNodeと呼ばれるQGraphicsItemから実装されたクラスを持っています。

私は長方形の「ノード」を持っていて、ユーザーがそれをクリックすると何かをすることができます

mousePressイベントとmouseReleaseイベントを使用します。

しかし、ユーザーが長方形の「外」をクリックしたときに通知を受け取りたいのですが。

私はこれらの関数を実装しようとしました:

Qtコード:

void Node::focusInEvent ( QFocusEvent * event){
cout<<"in"<<endl;
update();

QGraphicsItem::focusInEvent(event);
}
void Node::focusOutEvent ( QFocusEvent * event ){
cout<<"out"<<endl;
update();
QGraphicsItem::focusOutEvent(event);

}
void Node::hoverEnterEvent(QGraphicsSceneHoverEvent *event){
cout<<"out"<<endl;
}

長方形をクリックしたり、長方形の外をクリックしたりしても、これらは反応しません。たとえば、マウスの位置を取得して、長方形から外れている場合は制御するなど、自分でロジックを設定する必要がありますか?または組み込みのメソッドはありますか?

または、「ノード」オブジェクトは、他のノードオブジェクトがクリックされたかどうかをどのように知ることができますか?

また、グーグルで疑問に思いますが、focusineventとfocusouteventがいつトリガーされるのかわかりませんでしたか?アイテムをクリックしてからアイテムから外れたときにfocusOutEventが機能する必要があると思いますが、間違っていますか?

アイデアをありがとう。

4

2 に答える 2

2

ノードを構築するときは、次のことを行う必要があります。

setFlag( QGraphicsItem::ItemIsFocusable );
setAcceptHoverEvents( true );

最初の行はアイテムが実際にフォーカスを受け取れるようにし、後者はアイテムがマウスイベントを通知されるようにします。

于 2011-07-29T14:46:15.637 に答える
1

QGraphicsItem::ItemIsSelectableまたはQGraphicsItem:: ItemIsMovableでグラフィックアイテムのsetFlagsメソッドを呼び出しましたか?

QT docによると。

デフォルトでは、有効になっているフラグはありません。

于 2011-07-29T14:16:00.300 に答える