今天在测试别人遗留的bug的时候,发现一个细节,很容易忽略的问题,记录下
在对基于QGraphicsItem的类进行封装的时候,出现一个问题,就是拖动或者涉及到mouseMoveEvent()函数的时候,会出现位置不准确,达不到理论的移动效果,(逻辑是正确的)
是由于在重写的函数中添加了QGraphicsItem::mouseMoveEvent(event);这是我们的习惯导致的,
Qt的QGraphicsItem::mouseMoveEvent(event)本身会对item的pos进行设置,所以会出现move的时候,位置不准确,将QGraphicsItem::mouseMoveEvent(event);注释掉即可
//在执行QGraphicsItem的时候。会自动的进行pos的重新设置
// QGraphicsItem::mouseMoveEvent(event);
QPointF disPointF = event->scenePos() - m_lastPointF;
m_lastPointF = event->scenePos();
if(/*满足条件1,鼠标拖动item的某一点*/){
qDebug()<<this->pos()<<this->boundingRect()<<m_vecPointFs[m_iIndex];
m_vecPointFs[m_iIndex] = event->scenePos();
updateMiniRect();
}else if(/*满足条件2,拖动整个item*/){
//拖动的时候。m_vecPointFs是不变化的,变化的是this->pos()
for(int i=0;i<m_vecPointFs.count();i++){
m_vecPointFs[i] = m_vecPointFs[i]+disPointF;
}
updateMiniRect();
}
this->scene()->update();