当鼠标进入窗口时调用Qt mousePressedEvent

Qt mousePressedEvent called when mouse enter window

本文关键字:调用 Qt mousePressedEvent 窗口 鼠标      更新时间:2023-10-16

我有一个MainWindow(::QMainWindow),我重写了mousePressEventmouseReleaseEventmouseMoveEvent来跟踪鼠标。除了mousePressEvent,一切都很顺利。

当我按下鼠标左键并移动鼠标时,会调用mouseMoveEvent,然后我将鼠标移出窗口并释放鼠标左键,然后我在不按下左键的情况下将鼠标移动到窗口中,就会调用mousePressedEvent。当我自鼠标进入后第一次单击左键时,mousePressedEvent不会被调用。

奇怪的是,在没有按下按钮的情况下调用mousePressedEvent

我想知道这是qt的默认策略还是一个bug。我该如何克服这一点?


在向这些方法添加日志后,我发现当我在按下按钮的情况下将鼠标移出窗口时,mouseReleaseEvent会自动调用,而按钮不会释放。

另外,我正在使用Qt 5.4.0 的mac os 10.11上工作


最后我发现这不是Qt的默认策略。我有这个问题是因为我在QtWindow中添加了一个NSView。

您正在使用event(QEvent *curEvent)公共插槽吗?我按照你说的方法锻炼,效果很好。当您在MainWindow之外释放鼠标时,您将获得MouseRelese事件,当您返回MainWindow时,不会调用mousepress事件。请使用以下代码进行检查。我正在使用QT on WindowsMinGW编译器。

bool MainWindow :: event(QEvent *curEvent)
{
    if(curEvent->type() == QEvent::MouseButtonPress)
    {
        qDebug() << "Mouse Press";
    }
    if(curEvent->type() == QEvent::MouseButtonRelease)
    {
        qDebug() << "Mouse Release";
    }
    if(curEvent->type() == QEvent::MouseMove)
    {
        qDebug() << "Mouse Move";
    }
    return QWidget::event(curEvent);
}