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
どうすれば入手できますか?