[进阶]Qt使用鼠标

本文例程程序源码:公众号回复qt0004

本文例程可执行安装包:公众号回复qt0005

我们在各种界面中,都要用到鼠标事件。在PC端就是呈现为鼠标,在嵌入式端则呈现为触屏事件,这在Qt中具体实现也是鼠标事件。

Qt鼠标事件是通过重载对应的事件函数来实现,所以我们不必要纠结过分的底层,只需要构建好自己的逻辑就可以了。

我们将有关于鼠标的事件统称为鼠标事件,细化可分为鼠标按下事件、鼠标双击事件、鼠标移动事件、鼠标松开事件以及鼠标滚轮事件,本文会一一讲解并通过代码实现。

我认为授人以鱼不如授人以渔,我会给出本文讲解所使用的代码,但是都是一些简单的例子,这更有利于学习的朋友们理解本文的主题,使用很复杂的工程反而不利于学习。

 

一、鼠标按下事件

事件函数:void mousePressEvent(QMouseEvent *e);

按下事件可分为左键按下、右键按下滚轮按下事件,按下后可获得鼠标在界面中的信息,我们在本次实验中获取的是鼠标在界面中的坐标信息,具体实现是在头文件中包含

void mousePressEvent(QMouseEvent *e);

在.cpp文件中就可以写我们的逻辑

void MouseTest::mousePressEvent(QMouseEvent *e)//按下事件
{
    if(e->button() == Qt::LeftButton)//左键
    {
        QString sText = "左键";
        sText.append(QString("(%1,%2)").arg(e->x()).arg(e->y()));
        ui->textBrowser->append(sText);
    }
    else if(e->button() == Qt::RightButton)//右键
    {
        QString sText = "右键";
        sText.append(QString("(%1,%2)").arg(e->x()).arg(e->y()));
        ui->textBrowser->append(sText);
    }
    else if(e->button() == Qt::MidButton)//滚轮键
    {
        QString sText = "滚轮";
        sText.append(QString("(%1,%2)").arg(e->x()).arg(e->y()));
        ui->textBrowser->append(sText);
    }
}

我们在界面中非显示区域点击鼠标即可获得坐标信息

 

二、鼠标双击事件

事件函数:void mouseDoubleClickEvent(QMouseEvent *e);

我们在日常生活中遇到的鼠标双击都是使用左键双击,你可以使用上面的方式来判断我们按下的键。当然,鼠标双击一定是有按下事件的,就是单击,只有按下的第二次才会被判别为双击,这是我们要注意的地方。在头文件中包含

void mouseDoubleClickEvent(QMouseEvent *e);

具体逻辑在对应.cpp文件中实现

void MouseTest::mouseDoubleClickEvent(QMouseEvent *e)//双击事件
{
    QString sText = "双击";
    sText.append(QString("(%1,%2)").arg(e->x()).arg(e->y()));
    ui->textBrowser->append(sText);
}

我们可以看到如下效果


三、鼠标移动以及松开事件

移动事件函数:void mouseMoveEvent(QMouseEvent *e);

松开事件函数:void mouseReleaseEvent(QMouseEvent *e);

移动事件是在按下鼠标后,鼠标在界面中移动的过程中所读取的内容。

鼠标松开事件是当我们鼠标键位被按下松开,都会跳入的事件,不要因为我和移动事件写在一起就认为只有在移动过后才可以跳入该事件。

头文件中包含

void mouseMoveEvent(QMouseEvent *e);

在对应.cpp中实现具体逻辑​​​

void MouseTest::mouseMoveEvent(QMouseEvent *e)//移动事件
{
    QString sText = "移动";
    sText.append(QString("(%1,%2)").arg(e->x()).arg(e->y()));
    ui->textBrowser->append(sText);
}
void MouseTest::mouseReleaseEvent(QMouseEvent *e)//松开事件
{
    QString sText = "松开";
    sText.append(QString("(%1,%2)").arg(e->x()).arg(e->y()));
    ui->textBrowser->append(sText);
}

具体呈现效果如下

 

四、鼠标滚轮滑动事件

事件函数:void wheelEvent(QWheelEvent *e);

我们通过读取angleDelta返回的的轮子走过的距离,来完成判定,具体的值为度的1/8,返回的值为正表示向前滑动滚轮,负为向后滑动滚轮。在头文件中包含

void wheelEvent(QWheelEvent *e);

在对应.cpp中实现逻辑

void MouseTest::wheelEvent(QWheelEvent *e)//滚轮滑动
{
    QString sText = "滚轮";
    sText.append(QString("(%1,%2 %3°)").arg(e->x()).arg(e->y()).arg(e->angleDelta().y()));
    ui->textBrowser->append(sText);
    qDebug()<<e->angleDelta();
}

呈现效果如下

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QT是一种强大的跨平台应用程序开发框架,它提供了丰富的图形用户界面(GUI)组件和功能。在QT使用鼠标进行拖拽画图是一项常见的任务。下面我来简单介绍一下如何实现这个功能。 首先,我们需要在Qt中创建一个QWidget或QGraphicsView作为画布,用于显示绘制的图形。然后,我们需要重写该小部件的鼠标事件处理函数,以便在鼠标按下、移动和释放时进行相应的操作。 在鼠标按下事件中,我们需要获取鼠标的起始位置,并将其保存下来。这可以通过重写鼠标按下事件处理函数,并通过QMouseEvent对象的pos()函数来获取。 然后,在鼠标移动事件中,我们需要获取当前的鼠标位置,并使用起始位置与当前位置的差值来计算出鼠标的位移量。通过这个位移量,我们可以相应地绘制图形或移动已有的图形。这可以通过重写鼠标移动事件处理函数,并使用QMouseEvent对象的pos()函数来获取当前鼠标位置,然后进行相应的计算和绘制操作。 最后,在鼠标释放事件中,我们需要进行一些清理工作,例如保存绘制的图形或完成某个绘制动作。这可以通过重写鼠标释放事件处理函数来实现。 为了实现画图的功能,我们可以使用QPainter类进行绘制操作。通过调用QPainter对象的各种绘制函数,我们可以在画布上绘制出直线、曲线、矩形、圆形等各种图形。 综上所述,通过重写鼠标事件处理函数和使用QPainter类,我们可以在QT使用鼠标进行拖拽画图。这样用户可以通过鼠标操作,在画布上自由绘制各种图形。不仅可以提供良好的用户体验,还可以满足用户对图形绘制的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值