【Qt】Qt系统 | Qt事件| 鼠标事件

在 Qt 中,鼠标事件是用 QMouseEvent 实现的。当在窗口中按下鼠标或者移动鼠标时,都会产生鼠标事件
在这里插入图片描述


鼠标事件

鼠标点击事件

鼠标按下时通过 虚函数 mousePressEvent() 来捕获的。函数原型如下:
在这里插入图片描述
QMouseEvent类 可以通过 button() 函数获取鼠标如何触发该事件(左键/右键…),其函数原型如下:
在这里插入图片描述
返回值是 QMouseEvent::Buttons,这是一个枚举类
在这里插入图片描述

  • Qt::LeftButton:左键
  • Qt::RightButton:右键
  • Qt::MidButton:滚轮键按下

代码示例:捕获鼠标按下事件

void Widget::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
        qDebug() << "鼠标左键按下";
    else if(event->button() == Qt::RightButton)
        qDebug() << "鼠标右键按下";
    else if(event->button() == Qt::MidButton)
        qDebug() << "滚轮中键按下";
}

运行结果如下:
在这里插入图片描述


鼠标释放事件

鼠标释放就是按下后,松开的那一瞬
鼠标释放事件是通过 虚函数 mouseReleaseEvent() 捕获的。函数原型如下:
在这里插入图片描述
也可以通过 button() 获取是哪个按键释放

代码示例:

void Widget::mouseReleaseEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
        qDebug() << "鼠标左键释放";
    else if(event->button() == Qt::RightButton)
        qDebug() << "鼠标右键释放";
    else if(event->button() == Qt::MidButton)
        qDebug() << "滚轮中键释放";
}

运行结果如下:
在这里插入图片描述
mousePressEvent() 是按下就会触发,mouseReleaseEvent() 是松开鼠标才触发

鼠标双击事件

鼠标双击事件通过 虚函数 mouseDoubleClickEvent() 捕获,其函数原型如下:
在这里插入图片描述

代码示例:

void Widget::mouseDoubleClickEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
        qDebug() << "鼠标左键双击";
}

运行结果如下:
在这里插入图片描述

若没有对双击事件进行捕获,也不会触发鼠标按下事件
在这里插入图片描述


鼠标移动事件

鼠标移动事件是通过 虚函数 mouseMoveEvent() 捕获的。其函数原型如下:
在这里插入图片描述
但是鼠标移动是很频繁触发的,为了保证CPU效率,只重写虚函数不会触发事件处理函数
还需要通过 setMouseTracking() 来追踪鼠标的位置,函数原型如下:
在这里插入图片描述

setMouseTracking() 默认是 false,需要设置为 true,才能实时捕获鼠标位置信息。否则只有当鼠标按下时才能捕获其位置信息

代码示例:实时显示鼠标位置

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //设置鼠标追踪捕获
    setMouseTracking(true);
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{
	//获取鼠标位置
    QString pos = QString("[%1, %2]").arg(event->x()).arg(event->y());
    qDebug() << "鼠标当前位置:" << pos;
}

运行结果如下:
在这里插入图片描述


滚轮事件

在 Qt 中,鼠标滚轮事件是通过 QWheelEvent类 实现的。
通过 虚函数 wheelEvent() 捕获滚轮事件,其函数原型如下:
在这里插入图片描述

滚轮滑动的距离可以通过 delta() 函数获取。函数原型如下:
在这里插入图片描述
返回值代表滚轮滑动的距离。正数表示滚轮相对于用户向前滑动,负数表示滚轮相对于用户向后滑动

代码示例:记录滑轮滚动的距离

void Widget::wheelEvent(QWheelEvent *event)
{
    static int x = 0;
    x += event->delta();
    if(x > 0)
        qDebug() << "滚轮向前滚动:" << x;
    else if(x < 0)
        qDebug() << "滚轮向后滚动:" << x;
}

运行结果如下:
在这里插入图片描述

结束语
感谢你的阅读
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值