1

Qt/OpenGL アプリケーションから始めます。QGLWidget の GLWidget サブクラス (" ") を含む最初の QMainWindow がありますwidget_2。この GLWidget は、グラフィック アニメーションをレンダリングします。

この QMainWindow のメニューから、2 番目の QMainWindow を呼び出して、アニメーションのパラメータを設定しますwidget_2

フォーカス以外はすべて正常に動作します。マウスを QWindow から別のウィンドウに移動したときに、マウスに追従するフォーカスを持ちたいと思います。

widget_2->setMouseTracking(true)最初の QMainWindow のコンストラクターで使用しようとしましたが、問題は、マウスをオンにして回転を行うことですwidget_2。そのため、2 番目の QMainWindow から最初の QMainWindow に移動すると、マウスは最初の 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;
}

現在、2 番目の QMainWindow でパラメータをロードしてから最初の QMainWindow に移動すると、左クリックして 3D シーンを回転させ、pushButtons を押せるようにする必要があります。

フォーカスがマウスに追従するようにします。つまり、既に実装されているマウス回転機能と競合することなくwidget_2フォーカスがオンになり、メニュー上にあるときにボタンを押すために 2 回クリックする必要がなくなります。widget_2

どうすれば入手できますか?

4

0 に答える 0