当我选择几个QGraphicsItem(使用Ctrl键)时,我可以将它们一起移动,但只对实际接收事件的项触发mouseMoveEvent。有没有办法让每个选定的项目都能收到活动?我在Qt的文档中找不到它。
我可以将所选项目组合在一起并在QGraphicsView的mouseMoveEvent中处理吗?
非常感谢您的帮助:)
答案 0 :(得分:2)
据我所知,没有默认方法可以做你想做的事。您可以做的事情如下:
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);
}
答案 1 :(得分:1)
我正在阅读您的问题的某些内容,但听起来您可能会通过在QGraphicsItem::itemChange
课程上实施QGraphicsItem
来获得更好的服务。无论何时通过鼠标,键盘,程序等改变位置,都会调用此方法。如果您愿意,甚至可以取消更改。