当前位置:   article > 正文

QGraphicsItem封装之mouseMoveEvent()_qgraphicsitem mousemoveevent

qgraphicsitem mousemoveevent

今天在测试别人遗留的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();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/91744
推荐阅读
相关标签
  

闽ICP备14008679号