我有一个小部件,当用户在其上按下鼠标时,我想运行某些功能。但是我只想在鼠标按下导致焦点改变时运行它。我尝试了以下方法:
void MyWidget::mousePressEvent(QMouseEvent *event)
{
if (hasFocus()) // WRONG: I want to check whether the widget had focus before the mouse press, but it does not work, this always returns true
{
//do something for which I need `event.pos()`
}
MyWidgetParent::mousePressEvent(event);
}
但不起作用。 hasFocus()
中的mousePressEvent()
始终是正确的,似乎焦点在调用mousePressEvent()
之前已更改。另一方面,我无法在focusInEvent
中实现此功能,因为我不知道其中的鼠标event.pos()
。
任何想法如何解决此问题?
答案 0 :(得分:1)
您可以为QFocusEvent
(focusInEvent
)实现处理程序,并检查reason()
是否为MouseFocusReason
。您可以将其保存在变量中,然后在QMouseEvent
中检查并重置该变量。因此,如果该元素被鼠标聚焦,并且您知道鼠标事件,则该鼠标事件会引起焦点变化。