Qt 在QGraphicsView中拖动鼠标时,如何量化多个QGraphicsSitem的位置?

Qt 在QGraphicsView中拖动鼠标时,如何量化多个QGraphicsSitem的位置?,qt,mouse,mouseevent,qgraphicsview,qgraphicsitem,Qt,Mouse,Mouseevent,Qgraphicsview,Qgraphicsitem,您好,谢谢您的阅读。在QGraphicsView中拖动鼠标时,我无法正确量化多个QGraphicsSitem的位置。我设置的系统正确地量化了QGraphicsItem,如果一次只拖动一个,但是如果我选择了多个并拖动它们,则仅量化了鼠标正下方的主项,其余的则连续设置其位置。我将非常感谢您在这方面的任何帮助。有关守则如下: 这在一个名为MutaEvent的类中,该类继承自QGraphicsRecItem。我重新定义了mouseMoveEvent和setPos函数: void MutaEvent::m

您好,谢谢您的阅读。在QGraphicsView中拖动鼠标时,我无法正确量化多个QGraphicsSitem的位置。我设置的系统正确地量化了QGraphicsItem,如果一次只拖动一个,但是如果我选择了多个并拖动它们,则仅量化了鼠标正下方的主项,其余的则连续设置其位置。我将非常感谢您在这方面的任何帮助。有关守则如下:

这在一个名为MutaEvent的类中,该类继承自QGraphicsRecItem。我重新定义了mouseMoveEvent和setPos函数:

void MutaEvent::mouseMoveEvent( QGraphicsSceneMouseEvent * event )
{
    QGraphicsRectItem::mouseMoveEvent(event);
    setPos(pos());
}

void MutaEvent::setPos(const QPointF &pos)
{
    QGraphicsRectItem::setPos(Muta::quantizePointD(pos,30,15));
    emit posChanged(objectID,pos);
}
下一位是名为Muta的命名空间中的静态函数:

static QPointF quantizePoint(QPointF point,double xQuant, double yQuant)
{
    double x = quantize(point.x(),xQuant);
    double y = quantize(point.y(),yQuant);
    QPointF quantPoint(x,y);
    return quantPoint;
}

任何帮助都将不胜感激

所有选定的项目都是您的MutaEvent类吗?setPos在每个选定项上都被调用,因此如果不是,它将只使用默认实现


如果希望鼠标事件处理正常工作,您可能需要实现自己的鼠标事件处理。顺便说一句,在MutaEvent::mouseMoveEvent中调用setPospos不会有任何效果。

看看重写QGraphicsItem::itemChange受保护的函数。从那里,当项目位置即将更改QGraphicsItem::ItemPositionChange并有机会修改该值时,可以通知您。无论更改是如何启动的,都会调用此方法鼠标移动、组的一部分、在代码中设置等

我怀疑部分问题在于QGraphicsItem::setPos不是虚拟的,这意味着如果调用方将MutaEvent*的实例视为QGraphicsItem*,则不会调用setPos函数。在Qt框架中的任何地方都是这样,因为他们当然不知道您的MutaEvent类。这就是为什么他们提供了virtualitemchange方法