设计感的网站,做智能网站系统,做360网站优化快速,seo网站优化服务商一、问题 在项目的需求中#xff0c;地图A上面需要叠放一个任务窗口B#xff0c;B覆盖了A#xff0c;导致A接受不到鼠标及滚轮事件。
二、解决方案 1、Qt::WA_TransparentForMouseEvents 是 Qt 框架中的一个属性#xff0c;用于使指定的控件及其子控件不响应鼠标事件。当启…一、问题 在项目的需求中地图A上面需要叠放一个任务窗口BB覆盖了A导致A接受不到鼠标及滚轮事件。
二、解决方案 1、Qt::WA_TransparentForMouseEvents 是 Qt 框架中的一个属性用于使指定的控件及其子控件不响应鼠标事件。当启用此属性时鼠标事件将传递给其他控件就像这些控件及其子控件不存在于控件层次结构中一样 2、利用postEvent给指定控件发送事件。 重载上面widget的事件处理函数利用postEvent发送事件让事件分发给下面的窗口
三、案例
//上层窗口
void Widget::mousePressEvent(QMouseEvent *event)
{QWidget::mousePressEvent(event);postMouseEventToSlibings(event);qDebug() widget mousePressEvent;
}void Widget::postMouseEventToSlibings(QMouseEvent *event)
{if (this-parentWidget()){this-setAttribute(Qt::WA_TransparentForMouseEvents, true);auto point this-mapTo(parentWidget(), event-pos());auto widget parentWidget()-childAt(point);if (widget){point widget-mapFrom(parentWidget(), point);auto e new QMouseEvent(event-type(), point, event-button(),event-buttons(), event-modifiers());QApplication::postEvent(widget, e);}}setAttribute(Qt::WA_TransparentForMouseEvents, false);
}