QT鼠标点击穿透

在项目中有需求是实现左右划屏和鼠标点击事件同时能响应,但是按钮组件会将点击事件处理后不下发,所以需要在按钮的上层覆盖一层触摸层,触摸成接收点击事件,处理后继续下发给按钮,实现既能滑动屏幕,又能点击按钮,就像手机一样。
实现这个功能需要重写:mousePressEvent,mouseReleaseEvent,mouseMoveEvent这三个函数
例如:
void sliderArea::mousePressEvent(QMouseEvent *event)
{
m_clickX = event->x();
m_isMove = true;
if (this->parentWidget())//存在父窗口
{
this->setAttribute(Qt::WA_TransparentForMouseEvents, true);//自己不接收点击信号
QPoint point = this->mapTo(this->parentWidget(), event->pos());//获取在父窗口的点击位置
m_curPressBtn = this->parentWidget()->childAt(point);//根据坐标找到穿透后的组件
if (m_curPressBtn)//如果有
{
point = m_curPressBtn->mapFrom(this->parentWidget(), point);
QMouseEvent *mouseEvent = new QMouseEvent(event->type(), point, event->button(), event->buttons(), event->modifiers());
QApplication::postEvent(m_curPressBtn, mouseEvent);//下发鼠标事件
}
this->setAttribute(Qt::WA_TransparentForMouseEvents, false);//自己重新接收点击信号
}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值