qgraphicsitem移动时让父类移动
时间: 2024-10-18 16:10:13 浏览: 24
Qt5 自定义QGraphicsItem的选择、缩放、移动、旋转
5星 · 资源好评率100%
在使用QGraphicsItem进行图形元素在Qt GUI库中动画或拖动时,如果想要当QGraphicsItem移动时使其父容器也跟着移动,你需要利用事件传递机制以及`parentItem()`函数。当你在QGraphicsItem内部处理鼠标按下、移动或释放等事件时,可以获取到当前的相对位置,并将这个位置加到其父QGraphicsItem的位置上。
例如,在处理`QGraphicsSceneMouseEvent`时:
```cpp
void MyGraphicsItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) {
// 获取父级QGraphicsItem的位置
QPointF parentPos = parentItem()->pos();
// 计算新的绝对位置
QPointF newPos = parentPos + event->scenePos() - lastKnownMousePosition;
// 更新自身位置并更新父级位置(假设需要父级跟随)
setPos(newPos);
parentItem()->setPos(newPos);
// 更新lastKnownMousePosition
lastKnownMousePosition = event->scenePos();
}
```
这里`lastKnownMousePosition`是一个变量用于保存上一次鼠标位置,以便计算移动的距离。注意,这会使得整个包含树的所有QGraphicsItem都随着鼠标一起移动,如果你只想让某个特定层次的父级跟随,可以在移动操作中添加相应的条件判断。
阅读全文