Qt 怎么检测鼠标在不在某个控件上
Published on 2022-08-16 18:21 in 分类: Qt with 萧海~
分类: Qt

Qt 怎么检测鼠标在不在某个控件上

    方式一:事件过滤器

    // 构造函数内:记得安装事件过滤器
    this->installEventFilter(this);
    bool MainWidget::eventFilter(QObject *obj, QEvent *event)
    {
    // 判断部件
    if (obj == m_pWidget)
    {
    // 判断事件
    if (event->type() == QEvent::Enter){
    //qDebug() << "MOUSE_IN"; // 打印,可以提高鼠标移入移出检测到的成功率
    return true;
    }
    else if (event->type() == QEvent::Leave){
    return true;
    }
    return false;
    }
    return QWidget::eventFilter(obj,event);
    }

    方式二:重写鼠标事件

    // 如果控件有父亲,记得也要设置鼠标追踪
    this->setMouseTracking(true);
    void MyLabel::mouseMoveEvent(QMouseEvent *ev)
    {
    // 鼠标的位置
    int x = ev->x();
    int y = ev->y();
    }

    上面两种方法可以动态的监听鼠标是不是在某个控件上。

    回到顶部
    方式三:根据 QRect 的 contains 方法

    if(!ui->lineEdit->geometry().contains(this->mapFromGlobal(QCursor::pos())));

    方法四:underMouse 方法

    if(ui->lineEdit->underMouse)

    方法五:childAt 方法

    // 若child为空,说明鼠标位置在MainWidget区域
    MainWidget *child = static_cast<MainWidget*>(childAt(event->pos()));
    if(!child) {
    }

    https://www.cnblogs.com/linuxAndMcu/p/16591063.html

    posted @   萧海~  阅读(2289)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · winform 绘制太阳,地球,月球 运作规律
    · AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
    · 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
    · 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
    · 上周热点回顾(3.3-3.9)
    点击右上角即可分享
    微信分享提示
    电磁波切换