1 我们需要扩展QLabel这个类, 让它多捕获一些事件, 不需要修改控件, 所以添加一个C++类即可
    image.png
    然后把继承关系和头文件,源文件都改为继承QLabel
    image.png
    image.png

    2 写好事件函数
    image.png

    3 添加Label控件, 提升为MyLabel类
    image.png

    4 写代码

    1. #include "mylabel.h"
    2. #include <QDebug>
    3. #include <QMouseEvent>
    4. MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
    5. {
    6. // 设置鼠标追踪,实现无需按下左键即可追踪鼠标移动事件
    7. setMouseTracking(true);
    8. }
    9. void MyLabel::enterEvent(QEvent *)
    10. {
    11. qDebug() << "鼠标进入";
    12. }
    13. void MyLabel::leaveEvent(QEvent *)
    14. {
    15. qDebug() << "鼠标离开";
    16. }
    17. void MyLabel::mousePressEvent(QMouseEvent *ev)
    18. {
    19. if(ev->button() == Qt::LeftButton)
    20. {
    21. QString str = QString("鼠标按下了,x=%1,y=%2").arg(ev->x()).arg(ev->y());
    22. qDebug() << str;
    23. }
    24. }
    25. void MyLabel::mouseReleaseEvent(QMouseEvent *ev)
    26. {
    27. if(ev->button() == Qt::LeftButton)
    28. {
    29. QString str = QString("鼠标释放了,x=%1,y=%2").arg(ev->x()).arg(ev->y());
    30. qDebug() << str;
    31. }
    32. }
    33. void MyLabel::mouseMoveEvent(QMouseEvent *ev)
    34. {
    35. if(ev->buttons() & Qt::LeftButton) // 持续状态需要用buttons,按位与
    36. {
    37. QString str = QString("鼠标移动了,x=%1,y=%2").arg(ev->x()).arg(ev->y());
    38. qDebug() << str;
    39. }
    40. }