如何在QWindow上启用鼠标跟踪

时间:2017-02-09 20:04:19

标签: c++ qt qt5

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

我正在尝试按照Scribble示例实现类似于平移的内容,但我找不到触发mouseMoveEvent()的范式方法。

如何在mouseMoveEvent()不断触发的情况下获得“工具提示”效果,类似于setMouseTracking()

2 个答案:

答案 0 :(得分:1)

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

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

它有效,因为我移动鼠标即使没有按任何鼠标按钮也可以获得事件。

答案 1 :(得分:0)

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

您可以致电hasMouseTracking()setMouseTracking()来控制鼠标的追踪状态。

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

顺便说一下,鼠标事件总是会转移到您的应用中,但会被其父级或自身过滤。您可以重新填充eventFilter()来编写自己的过滤器。