如何为自定义QWidget容器设置自定义光标?
扩展上下文:
在实施自定义QWidget
容器的过程中:
任意[Child]
类的小部件QWidget
都嵌入在另一个[Parent]
中,这是我们的自定义容器:
[Parent] of type CustomContainer | |---> [Child] An arbitrary non-custom QWidget.
指向CustomContainer
的某些区域时需要设置特殊鼠标光标,但Child
需要保持正常光标。
尝试失败:
原则上,它可能是:
void mouseMoveEvent( QMouseEvent *ev)
{
if (specialRect->contains(ev->pos())) setCursor(Qt::SizeVerCursor);
else setCursor(Qt::ArrowCursor);
}
不幸的是,仅当光标直接位于mouseMoveEvent
时才会收到[Parent]
,因此光标不会恢复为[Child]
的原始形状。同样的规则适用于enterEvent
和leaveEvent
。
另一种方法是设置事件过滤器,这对于应用程序来说不是问题,但是QWidget类应该IMO不会注册可能带来副作用的事件过滤器,从而减慢应用程序等。