关于QWidget子类的mouseMove事件

今天发现鼠标移动的时候,并不会产生鼠标移动事件,但是鼠标按下后就会触发了,看了qt的文档

文档中也是这么说,https://doc.qt.io/qt-5/qwidget.html#mouseMoveEvent

如果想要实时监听鼠标移动事件,需要调用

setMouseTracking(true);

 

======================

如果mouseMove中移动窗口,最好用globalPos()处理坐标,直接用pos会有抖动的情况发生

参考https://doc.qt.io/qt-5/qmouseevent.html#pos

void UserWidget::mousePressEvent(QMouseEvent *event)
{
    qDebug()<<"mouse pressed";
    if(event->button() == Qt::MouseButton::LeftButton)
    {
        startPos = event->pos();
        mbLeftButtonDown = true;
    }
}

void UserWidget::mouseReleaseEvent(QMouseEvent *event)
{
    if(event->button() == Qt::MouseButton::LeftButton)
    {
        mbLeftButtonDown = false;
    }
}

void UserWidget::mouseMoveEvent(QMouseEvent *event)
{
    if(mbLeftButtonDown)
    {
        QPoint offset = event->globalPos() - startPos;
        move(offset);
    }
}

 

======================

mouseMove采样点丢失,点与点之间间隔太大?

在mouseMove中绘图性能低,消耗太多的资源,建议不要完全重绘,

绘图中我犯的几个错误:

1.从一次鼠标按下,到这次鼠标移动的每一步,都重绘了这次的所有路径,导致越往后,采样点丢失越严重,

解决方案:每次都只画鼠标移动新增的点,其他的绘制都记录到QPixmap中,然后绘制整个pixmap和新增的点,鼠标释放后,再将整个路径记录到QPixmap中,

2.鼠标选中一条路径,移动这条路径的时候重绘了所有路径

解决方案:鼠标选中路径时,重绘一次其他所有路径到QPixmap,然后移动过程中绘制QPixmap和选中的路径

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值