今天发现鼠标移动的时候,并不会产生鼠标移动事件,但是鼠标按下后就会触发了,看了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和选中的路径