赞
踩
今天在测试别人遗留的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();
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。