目录

QT-鼠标事件

QT—鼠标事件

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

在 Qt 中,鼠标事件处理是 GUI 开发的重要组成部分。本文将介绍 Qt 中常见的鼠标事件及其应用,并结合示例代码进行讲解


提示:以下是本篇文章正文内容,下面案例可供参考

一、鼠标事件概述

Qt 提供了一系列鼠标事件的处理函数,用于检测和响应用户的鼠标操作。这些事件主要包括:

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

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

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

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

wheelEvent(QWheelEvent *event): 鼠标滚轮事件

二、鼠标按下与释放事件

mousePressEvent 处理 鼠标按下 事件,mouseReleaseEvent 处理鼠标释放事件。例如,我们可以在鼠标 按下更改鼠标指针的样式 ,在 释放时 恢复默认样式

void Widget::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton)//判断是否为左键点击
    {
        QCursor cursor;//生成一个鼠标对象
        cursor.setShape(Qt::ClosedHandCursor);//设置鼠标样式
        QApplication::setOverrideCursor(cursor);//将当前鼠标样式覆盖住之前样式 
        //这种方式可以在后续进行回退
        offset=event->globalPosition().toPoint()-pos();//用鼠标点击的位置减去图形框的左上角的位置
        // 记录x y的偏移量 offset内部有一个x和y
        这里放入一个offset是为了后续实现窗体拖动!!!!
    }
}

void Widget::mouseReleaseEvent(QMouseEvent *event)
{
    QApplication::restoreOverrideCursor();//回退样式 返回上一次的鼠标样式状态
}

三、 鼠标移动事件(实现窗口拖拽)

mouseMoveEvent 处理 鼠标移动 ,我们可以用它来实现 窗口的拖拽功能

void Widget::mouseMoveEvent(QMouseEvent *event)
{
   //注意这里是buttons()  前面是button  buttons可以判断是否一直按住不松开
    if (event->buttons() & Qt::LeftButton) // 检测是否一直按住左键
    {
        QPoint windowPos = event->globalPosition().toPoint() - offset;用鼠标当前位置减去偏移量
        就等于窗口的位置
        this->move(windowPos);然后移动窗口就行  注意鼠标左键一直不能松开噢
    }
}

四、 鼠标双击事件(切换全屏模式)

mouseDoubleClickEvent 用于检测 鼠标双击 。例如,我们可以在用户双击窗口时切换全屏模式:

void Widget::mouseDoubleClickEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton)//鼠标左键双击才行
    {
        if (windowState() == Qt::WindowFullScreen)如果此时已经为全屏 那就缩小
        {
            setWindowState(Qt::WindowNoState);
        }
        else此时是界面木有全屏 那就让他全屏
        {
            setWindowState(Qt::WindowFullScreen);
        }
    }
}

五、鼠标滚轮事件(文本缩放)

wheelEvent 处理 鼠标滚轮 操作,我们可以用它来放大或缩小 QTextEdit 组件中的文本

void Widget::wheelEvent(QWheelEvent *event)
{
    if (event->angleDelta().y() > 0)当鼠标滚轮向上滑动 
    {
        ui->textEdit->zoomIn();就让框里面的内容变大
    }
    else if (event->angleDelta().y() < 0)当鼠标滚轮向下滑动 
    {
        ui->textEdit->zoomOut();就让框里面的内容变小
    }
}

总结

Qt 提供了强大的鼠标事件处理机制,使得开发者能够轻松实现丰富的用户交互体验。通过结合 mousePressEvent、mouseMoveEvent、mouseDoubleClickEvent 和 wheelEvent,我们可以实现窗口拖拽、鼠标样式更改、全屏切换以及文本缩放等功能。