複数の QGraphicsItem を (Ctrl キーを使用して) 選択すると、それらを一緒に移動できますが、実際にイベントを受け取るアイテムに対してのみ mouseMoveEvent がトリガーされます。選択したすべてのアイテムがイベントを受け取れるようにする方法はありますか? Qtのドキュメントでは見つかりません。
選択した項目をグループ化し、QGraphicsView の mouseMoveEvent 内で処理できますか?
助けてくれてありがとう:)
複数の QGraphicsItem を (Ctrl キーを使用して) 選択すると、それらを一緒に移動できますが、実際にイベントを受け取るアイテムに対してのみ mouseMoveEvent がトリガーされます。選択したすべてのアイテムがイベントを受け取れるようにする方法はありますか? Qtのドキュメントでは見つかりません。
選択した項目をグループ化し、QGraphicsView の mouseMoveEvent 内で処理できますか?
助けてくれてありがとう:)
いいえ、私が知る限り、あなたが望むことを行うデフォルトの方法はありません。あなたができることは次のとおりです。
QGraphicsScene
化して実装するmouseMoveEvent
itemAt
マウス移動イベントで、関数を使用してイベント位置にアイテムがあるかどうかを確認しますisSelected
)、シーンの選択されているすべてのアイテムを取得します。サンプルコードは次のとおりです。
void mouseMoveEvent(QGraphicsSceneMouseEvent * mouseEvent)
{
QPointF mousePosition = mouseEvent->scenePos();
QGraphicsItem* pItem = itemAt(mousePosition.x(), mousePosition.y());
if (pItem == NULL)
{
QGraphicsScene::mouseMoveEvent(mouseEvent);
return;
}
if (pItem->isSelected() == false)
{
QGraphicsScene::mouseMoveEvent(mouseEvent);
return;
}
// Get all selected items
QList<QGraphicsItem *> items = selectedItems();
for (unsinged i=0; i<items.count(); i++)
// Do what you want to do when a mouse move over a selected item.
items[i]->doSomething();
QGraphicsScene::mouseMoveEvent(mouseEvent);
}
私はあなたの質問の行間を少し読んでいますが、クラスに実装することでより良いサービスを提供できるように思えQGraphicsItem::itemChange
ますQGraphicsItem
。これは、マウス、キーボード、プログラムなどによって位置が変更されるたびに呼び出されます。必要に応じて、変更をキャンセルすることもできます。