检查是否在mousePressEvent中通过鼠标按下更改了焦点

时间:2018-06-21 20:16:55

标签: c++ qt

我有一个小部件,当用户在其上按下鼠标时,我想运行某些功能。但是我只想在鼠标按下导致焦点改变时运行它。我尝试了以下方法:

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()

任何想法如何解决此问题?

1 个答案:

答案 0 :(得分:1)

您可以为QFocusEventfocusInEvent)实现处理程序,并检查reason()是否为MouseFocusReason。您可以将其保存在变量中,然后在QMouseEvent中检查并重置该变量。因此,如果该元素被鼠标聚焦,并且您知道鼠标事件,则该鼠标事件会引起焦点变化。