我从Qt / OpenGL应用程序开始。我有一个第一个QMainWindow,它包含QGLWidget的GLWidget子类(“widget_2
”)。此GLWidget呈现图形动画。
在这个QMainWindow的菜单中,我调用第二个QMainWindow,为widget_2
的动画设置参数。
除焦点外,每一件作品都很好。当我将鼠标从QWindow移动到另一个时,我希望鼠标跟随鼠标。
我尝试在第一个QMainWindow的构造函数中使用widget_2->setMouseTracking(true)
,但问题是我在widget_2
上使用鼠标进行旋转。因此,当我从第二个QMainWindow移动到第一个时,鼠标在第一个中被很好地捕获,但它可以自动旋转3D场景而无需按下左键。
我也尝试过enterEvent
这种方式(Ui_MainWindow是第一个QMainWindow的QObject):
void Ui_MainWindow::enterEvent(QEvent *event)
{
widget_2->setFocus(Qt::OtherFocusReason);
}
widget_2
中完成的轮换以这种方式在另一个文件(GLWidget.cpp)中实现:
void GLWidget::mousePressEvent(QMouseEvent *event)
{
if (event->buttons() & Qt::LeftButton)
{
xdiff = event->x();
ydiff = -event->y();
}
}
void GLWidget::mouseMoveEvent(QMouseEvent *event)
{
yrot = (event->x() - xdiff) / 10.0f;
xrot = (event->y() + ydiff) / 10.0f;
}
目前,当我在第二个QMainWindow上并且我加载参数然后我移动到第一个时,我必须单击左键来旋转3D场景并能够按下pushButtons。
我希望焦点跟随鼠标,即当我结束widget_2
时,焦点在widget_2
而不与已经实现的鼠标旋转功能发生冲突,当我在菜单上时,我不需要点击两次按钮。
我怎么能得到它?