• 鼠标和滚轮事件


    QMouseEvent(鼠标事件

    在小组件内按下或释放鼠标按钮或移动鼠标光标时,会发生鼠标事件。

    常用的函数:

    button()返回造成事件的按键
    buttons()返回造成事件的按键组
    flags()返回鼠标事件的标志
    globalx()鼠标光标的全局x位置

    globaly()

    鼠标光标的全局y位置

    globalPos() 

    返回事件发生时鼠标光标的全局位置
    x()鼠标光标相对于接收事件的小组件的 x 位置
    y()鼠标光标相对于接收事件的窗口小组件的 y 位置

    鼠标的键有:

    Qt::LeftButton左键
    Qt::RightButton右键
    Qt::MiddleButton滑轮
    Qt::AllButtons全部按键

    鼠标的事件:

    • enterEvent (QEvent *event)       鼠标进入事件
    • leaveEvent (QEvent *event)       鼠标离开事件

    • mousePressEvent(QMouseEvent *event)     鼠标按下事件

    • mouseReleaseEvent(QMouseEvent *event)  鼠标释放事件

    • mouseMoveEvent (QMouseEvent *event)      鼠标移动事件

    • mouseDoubleClickEvent(QMouseEvent *event) 鼠标双击事件

    在项目中添加以下函数:

    1. void enterEvent (QEvent *event);       鼠标进入事件
    2. void leaveEvent (QEvent *event);       鼠标离开事件
    3. void mousePressEvent(QMouseEvent *event);     鼠标按下事件
    4. void mouseReleaseEvent(QMouseEvent *event);  鼠标释放事件
    5. void mouseMoveEvent (QMouseEvent *event);      鼠标移动事件

    函数的实现为:

    1. void mtLabel::enterEvent(QEvent * event)//鼠标进入事件
    2. {
    3. qDebug()<<"鼠标进入";
    4. }
    5. void mtLabel::leaveEvent(QEvent * event)//鼠标离开事件
    6. {
    7. qDebug()<<"鼠标离开";
    8. }
    9. void mtLabel::mousePressEvent(QMouseEvent *event)//鼠标点击事件
    10. {
    11. if(event->button()==Qt::LeftButton)
    12. {
    13. qDebug()<<"鼠标左键点击";
    14. }
    15. if(event->button()==Qt::RightButton)
    16. {
    17. qDebug()<<"鼠标右键点击";
    18. }
    19. if(event->button()==Qt::MiddleButton)
    20. {
    21. qDebug()<<"鼠标滚轮点击";
    22. }
    23. }
    24. void mtLabel::mouseReleaseEvent(QMouseEvent *event)//鼠标放开事件
    25. {
    26. if(event->button()==Qt::LeftButton)
    27. {
    28. qDebug()<<"鼠标左键松开";
    29. }
    30. if(event->button()==Qt::RightButton)
    31. {
    32. qDebug()<<"鼠标右键松开";
    33. }
    34. if(event->button()==Qt::MiddleButton)
    35. {
    36. qDebug()<<"鼠标滚轮松开";
    37. }
    38. }
    39. void mtLabel::mouseMoveEvent (QMouseEvent *event)//鼠标移动事件
    40. {
    41. if(event->buttons() & Qt::LeftButton)
    42. {
    43. qDebug()<<"鼠标左键移动";
    44. }
    45. if(event->buttons() & Qt::RightButton)
    46. {
    47. qDebug()<<"鼠标右键移动";
    48. }
    49. qDebug()<<"move:"<<event->x()<<","<<event->y();
    50. }

    QMouseEvent中坐标的使用:

    • 基于控件的坐标:QPoint  p=(event->pos())
    • 基于窗口的坐标:QPoint  p=(event->globalpos())
    • 窗体的坐标:       QPoint  p= this->frameGeometry().topLeft();

    实现控件跟着鼠标移动:

    1. void mousePressEvent(QMouseEvent *event);//鼠标点击事件
    2. void mouseMoveEvent (QMouseEvent *event);//鼠标移动事件
    3. QPoint pos;//保存鼠标坐标
    4. QPoint qos;//保存框架的坐标

     实现:

    1. void mtLabel::mousePressEvent(QMouseEvent *event)//鼠标点击事件
    2. {
    3. if (event->button() == Qt::LeftButton)
    4. {
    5. //记录鼠标的全屏坐标.
    6. pos = event->globalPos();
    7. //记录窗体的全屏坐标.
    8. qos = this->frameGeometry().topLeft();//坐标是从左上角开始计算
    9. }
    10. }
    11. void mtLabel::mouseMoveEvent(QMouseEvent *event)//鼠标移动事件
    12. {
    13. if(event->buttons()&Qt::LeftButton)
    14. {
    15. QPoint Pos1 = event->globalPos() - pos;//记录坐标的差值
    16. move(qos+Pos1);//移动坐标
    17. }
    18. }

    鼠标双击的使用:

    1. void mtLabel::mouseDoubleClickEvent(QMouseEvent *event)//鼠标双击事件
    2. {
    3. if(event->button()==Qt::LeftButton)//双击左键
    4. {
    5. if(windowState()!=Qt::WindowFullScreen)//不是全屏的话
    6. {
    7. setWindowState(Qt::WindowFullScreen);//设置为全屏
    8. }
    9. else
    10. {
    11. setWindowState(Qt::WindowNoState);//恢复原样
    12. }
    13. }
    14. }

    设置鼠标追踪:

    在控件的构造函数中添加:

    setMouseTracking(true);  设置鼠标追踪

    可以不用点击执行鼠标移动的内容。 

    QWheelEvent(滚轮事件)

    wheelEvent(QWheelEvent *event);//滚轮事件

    1. void Widget::WheelEvent(QWheelEvent *event)
    2. {
    3. if(event->data()>0)//向上滚
    4. {
    5. UI->textEdit->zoomIn();进行放大
    6. }
    7. else
    8. {
    9. UI->textEdit->zoomout();进行缩小
    10. }
    11. }

  • 相关阅读:
    [云原生] Prometheus理论知识及系统搭建
    C++ Vector的模拟实现
    ZZ038 物联网应用与服务赛题第J套
    nodejs文档(一)
    Mybatis深度解析:从起源到现代应用的全景视角
    CC攻击的前身
    Biome-BGC生态系统模型与Python融合技术实践应用
    用Python脚本迁移MongoDB数据到金仓-kingbase数据库
    数据结构——栈
    快消品行业SaaS多租户解决方案,构建全产业链数字化营销竞争力
  • 原文地址:https://blog.csdn.net/qq_45303986/article/details/127820579