我从 Qt/OpenGL 应用程序开始。我有一个包含widget_2
QGLWidget 的 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
不与已经实现的鼠标旋转功能冲突,并且当我在菜单上时,我不需要单击两次按钮。
我怎么能得到它?