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