我有一个小部件(widget)位于myWidget的中心,我在myWidget上使用了mousePressEvent()来获取鼠标按下事件。我想在鼠标按下时隐藏myWidget,但是当在小部件内按下时不隐藏。我可以通过event->windowPos()计算出按下位置(QPointF),也可以使用ui->widget->rect()获取QRect。
如何检查QPointF是否在QRect内?
如何检查QPointF是否在QRect内?
使用:
if (ui->widget->geometry().contains(event->pos())) return;
如果(ui->widget->underMouse())
执行某些操作();
我猜,你可以重写方法Widget::mousePressEvent(QMouseEvent* event)
并在内部调用event->accept()
。
myWidget
。因此,myWidget
将仅获得发生在小部件几何图形之外的事件。
myWidget
的动态声明而无法覆盖它怎么办? - a.tabatabaeiWidget::mousePressEvent()
中使用函数Widget::childrenRegion()
,并使用 QRegion::contains(QPoint)
检查事件的位置。希望这能有所帮助。 - paceholdermyWidget
构造函数内安装一个事件过滤器:widget->installEventFilter(this)
。这样,您就能够在Widget::eventFilter(QObject *obj, QEvent *event)
函数中接收到为myWidget
创建的所有事件,然后简单地忽略它们。 - paceholderbool QRect::contains(const QPoint &point, bool proper = false) const
void MyWidget::mousePressEvent(QMouseEvent * event){
if(rect.contains(event->pos())){ // here rect is an object of QRect
...
}
}
event->pos()
而不是event->windowPos()
。 - thugaif (ui->widget->geometry().contains(event->pos())) return;
,一切正常。谢谢。 - a.tabatabaei