当我选择几个 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
课程上实施可能会更好地为您服务。每当位置发生变化时都会调用它——无论是通过鼠标、键盘、编程等等。如果你愿意,你甚至可以取消更改。