问题环境:
在使用QWidget创建无边框窗体WidgetA
时,要实现窗体可改变大小,在边框处要相应的改变鼠标样式,如:Qt::SizeBDiagCursor
等,因此需要对窗体鼠标事件进行监控。
问题:
1.使用setMouseTracking(true)
对鼠标进行监控(mouseMoveEvent(QMouseEvent *event)
),如果WidgetA
有个子窗体WidgetB
会占据WidgetA
的绝大部分空间,那么当鼠标移动到WidgetB
上时,WidgetA
就会失去对鼠标的监控。
2.使用setAttribute( Qt::WA_Hover,true)
也可以实现对鼠标的监控,相对于setMouseTracking(true)
来说,它可以弥补鼠标事件被子窗体获取的问题:
bool CGUIDialogResize::event(QEvent *event)
{
if (event->type() == QEvent::HoverEnter || event->type() == QEvent::HoverLeave
|| event->type() == QEvent::HoverMove)
{
QHoverEvent* pHoverEvent = static_cast<QHoverEvent *>(event);
setMouseStatus(pHoverEvent->pos());
}
return QWidget::event(event);
}