9.3 鼠标事件


***【在线视频教程】***

好文章,来自【福优学苑@音视频+流媒体】

9.3 鼠标事件

QMouseEvent的详细描述

首先请注意,Qt中的QMouseEvent一般只涉及鼠标左键或右键的单击、释放等操作,而对鼠标滚轮的响应则通过QWheeEvent来处理。


QMouseEvent类包含了用于描述鼠标事件的参数。好文章,来自【福优学苑@音视频+流媒体】


当在一个窗口里按住鼠标按键、或移动、或释放就会产生鼠标事件QMouseEvent。


鼠标移动事件只会在按下鼠标按键的情况下才会发生,除非通过显式调用QWidget::setMouseTracking()函数来开启鼠标轨迹,这种情况下只要鼠标指针在移动,就会产生一系列的QT鼠标事件;好文章,来自【福优学苑@音视频+流媒体】


在一个窗口中,当鼠标按键被按下时,QT会自动捕捉鼠标轨迹,鼠标指针所在的父窗口会继续接受鼠标事件,直到最后一个鼠标按键被释放。

好文章,来自【福优学苑@音视频+流媒体】

QMouseEvent的传递

一个鼠标事件包含一些指定的接受标志flag用于指出该事件是否会被接收和处理 ,如果鼠标指针所在的父窗口不接收该事件则可以调用函数ignore()予以忽略;


多个重叠的窗口在实现里好比一个递归的倒立树,鼠标事件会沿着鼠标指针所在的父窗口的链表向上传递,直到某个窗口调用accept()函数进行事件处理,否则该事件将被过滤销毁掉;好文章,来自【福优学苑@音视频+流媒体】


鼠标事件处理函数

需要对鼠标事件进行处理时,通常要重新实现以下几个鼠标事件处理函数:


  • QWidget::mousePressEvent()

  • QWidget::mouseReleaseEvent()

  • QWidget::mouseDoubleClickEvent()

  • QWidget::mouseMoveEvent()

 

鼠标事件代码

鼠标事件使用的时候,加头文件好文章,来自【福优学苑@音视频+流媒体】


#include <QMouseEvent>

1.鼠标按下事件

好文章,来自【福优学苑@音视频+流媒体】

复制代码

void Widget::mousePressEvent(QMouseEvent *event)

{

    // 如果是鼠标左键按下

    if(event->button() == Qt::LeftButton)

   {

        ···好文章,来自【福优学苑@音视频+流媒体】

    }

    // 如果是鼠标右键按下

    else if(event->button() == Qt::RightButton)

   {

       ···

    }

}

复制代码

2.鼠标移动事件

默认情况下,触发事件需要点击一下,才能触发。

可设置为自动触发:setMouseTracking(true); 


复制代码

void Widget::mouseMoveEvent(QMouseEvent *event)

{

    // 这里必须使用buttons()

    if(event->buttons() & Qt::LeftButton) //进行的按位与

    { 

       ···好文章,来自【福优学苑@音视频+流媒体】

    }

}


3.鼠标释放事件

void Widget::mouseReleaseEvent(QMouseEvent *event)

{

   ···

}


4.鼠标双击事件

void Widget::mouseDoubleClickEvent(QMouseEvent *event)

{

    // 如果是鼠标左键按下

    if(event->button() == Qt::LeftButton){      

        ···好文章,来自【福优学苑@音视频+流媒体】

    }

}


5.滚轮事件

void Widget::wheelEvent(QWheelEvent *event)

{    

    if(event->delta() > 0)// 当滚轮远离使用者时

    {

        ···好文章,来自【福优学苑@音视频+流媒体】

    }

    else//当滚轮向使用者方向旋转时

    {

        ···

    }

}


好文章,来自【福优学苑@音视频+流媒体】
***【在线视频教程】***