怎么将鼠标事件传递给被遮挡的控件

如何将鼠标事件传递给被遮挡的控件?
如图,绿色的控件对下方红色的控件有部分遮挡,鼠标点击这部分遮挡区域的时候红色控件无法接收到事件。
试过设置绿色控件的Qt::WA_TransparentForMouseEvents属性,但这样一来它上面的按钮也废掉了。
有没有办法既不影响按钮的功能,又能让后面的红色控件接收到鼠标事件呢?
怎么将鼠标事件传递给被遮挡的控件
------解决方案--------------------
貌似混淆啊,挡住了为么还要接收事件?不合逻辑啊
------解决方案--------------------
引用:
Quote: 引用:

你自己实现eventFilter,然后把控件都加到eventFilter里面就可以自己控制啦


这样做工作量太大了吧?
能不能简单的把事件传递给下面的控件呢?


这个工作量其实不大,你在eventFilter里面只要拦截鼠标按下和鼠标弹起的事件啊,拦截到再发给对应的控件就可以了
------解决方案--------------------
QApplication::postEvent()
------解决方案--------------------
有个建议,可以使用 QGraphicsView 来实现。绿色的 QGraphicsItem 不接受鼠标事件即可,它作为 button 的背景。红色的z序设置为 0 , 绿色为 1, button 为 2。这样就又有遮罩效果,又可以鼠标事件透传。需要你派生 QGraphicsItem 实现一个 button ,不过这也是分分钟的事儿。
------解决方案--------------------
简单来说:假设你有两个控件 widgetA, widgetB的对象 objA,objB
你想把A的某些event转发给B,在A里自己实现virtual void event(QEvent* e)
截获需要发给B的事件,然后复制该event(简单来说就是 new newevent, copy e to newevent),
然后qApp->postEvent(newevent, objB);
或者QApplication::postEvent(newEvent, objB)
------解决方案--------------------
引用:
Quote: 引用:

有个建议,可以使用 QGraphicsView 来实现。绿色的 QGraphicsItem 不接受鼠标事件即可,它作为 button 的背景。红色的z序设置为 0 , 绿色为 1, button 为 2。这样就又有遮罩效果,又可以鼠标事件透传。需要你派生 QGraphicsItem 实现一个 button ,不过这也是分分钟的事儿。


能详细说说吗?比如上面的图,黑色的控件继承QGraphicsView,红色和绿色控件以及button都继承QGraphicsItem?
这样的话会不会不能在界面编辑器中布局?
另外,QGraphicsView并不是继承自QWidget,如果自定义控件需要继承他们两个,是否涉及到了多重继承的问题?


不能在界面编辑器内布局,只需要继承 QGraphicsItem ,相当于:如果让一切重来……不过很灵活。
给我投票了吗,兄弟?博文决赛,投我一票,谢谢。