1

我从 Qt/OpenGL 应用程序开始。我有一个包含widget_2QGLWidget 的 GLWidget 子类(“”)的第一个 QMainWindow。此 GLWidget 呈现图形动画。

从这个 QMainWindow 的菜单中,我调用了第二个 QMainWindow,我在其中设置了动画的参数widget_2

除了焦点之外,一切都很好。当我将鼠标从 QWindow 移动到另一个时,我希望焦点跟随鼠标。

我尝试widget_2->setMouseTracking(true)在第一个 QMainWindow 的构造函数中使用,但问题是我使用鼠标进行旋转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 场景并能够按下按钮。

我希望焦点跟随鼠标,即当我结束时widget_2,焦点在widget_2不与已经实现的鼠标旋转功能冲突,并且当我在菜单上时,我不需要单击两次按钮。

我怎么能得到它?

4

0 回答 0