C++ 如何在QWindow上启用鼠标跟踪

C++ 如何在QWindow上启用鼠标跟踪,c++,qt,qt5,C++,Qt,Qt5,我正在OpenGL中使用QWindow(而不是QMainWindow)。我需要使用QWindow来正确控制OGL上下文 我试图按照这个例子来实现类似于平移的功能,但是我找不到一种范例方法来触发mouseMoveEvent() 我如何才能在持续触发mouseMoveEvent()的情况下获得“工具提示”效果,类似于setMouseTracking()?这对我来说很好。我创建了一个带有主窗口的测试程序,该主窗口继承了QWindow,而不是QMainWindow,并处理鼠标移动事件以打印光标位置: v

我正在OpenGL中使用
QWindow
(而不是
QMainWindow
)。我需要使用
QWindow
来正确控制OGL上下文

我试图按照这个例子来实现类似于平移的功能,但是我找不到一种范例方法来触发
mouseMoveEvent()


我如何才能在持续触发
mouseMoveEvent()
的情况下获得“工具提示”效果,类似于
setMouseTracking()

这对我来说很好。我创建了一个带有主窗口的测试程序,该主窗口继承了
QWindow
,而不是QMainWindow,并处理鼠标移动事件以打印光标位置:

void MainWindow::mouseMoveEvent(QMouseEvent *e)
{
    qDebug("%d, %d", e->pos().x(), e->pos().y());
}

它可以工作,当我移动鼠标时,即使不按任何鼠标按钮,我也会获得事件。

如果禁用鼠标跟踪(默认设置),小部件仅在移动鼠标时至少按下一个鼠标按钮时接收鼠标移动事件

您可以调用
hasMouseTracking()
setMouseTracking()
来控制鼠标的跟踪状态

跟踪鼠标时,将调用
mouseMoveEvent()
,您可以重新实现
mousemoveen()
以获取鼠标位置,就像@sashoalm所做的那样


顺便说一句,鼠标事件总是被传输到你的应用程序中,但会被它的父级或自身过滤掉。您可以重新实现
eventFilter()
来编写自己的过滤器。

因此,这解决了我的问题,但没有回答问题。真正悬而未决的问题是,
setMouseTracking
?mikhail您可以检查它在源代码中的作用,因为Qt是开源的。作为Sashaalm,即使“hasMouseTracking()”不存在,也会调用
mouseMoveEvent()