誰かがQtの(QGL)ウィジェットの中心にマウスの位置を保つためにトリックを持っているのだろうかと思います。私はデルタを見つけた後にマウスを置くことができると読んでいますが、この方法は私のために非常にバギーです。マウスイベントは正しく登録されていません。もしそうであれば、非常に不安定です。マウスを中心にしたQt
void World::mouseMoveEvent(QMouseEvent *event)
{
if (event->buttons() & Qt::LeftButton) {
GLfloat dx = GLfloat(event->x() - lastPos.x())/width();
GLfloat dy = GLfloat(event->y() - lastPos.y())/height();
player->rotHorizontal += 360.0 * dx;
if(player->rotHorizontal < 0.0)
player->rotHorizontal += 360.0;
else if(player->rotHorizontal > +360.0)
player->rotHorizontal -= 360.0;
player->rotVertical += 360.0 * dy;
if (player->rotVertical > MAX_ROTATION_UP) {
player->rotVertical = MAX_ROTATION_UP;
} else if (player->rotVertical < -MAX_ROTATION_UP) {
player->rotVertical = -MAX_ROTATION_UP;
}
}
// int diffX = event->pos().x() - lastPos.x() % 20;
// int diffY = event->pos().y() - lastPos.y() % 20;
// if (diffY > 10 || diffX > 10 || diffY < -10 || diffX < -10) {
// QPoint glob = mapToGlobal(QPoint(this->pos().x() + width()/2, this->pos().y() + height()/2));
// QCursor::setPos(glob);
// }
lastPos = event->pos();
QGLWidget::mouseMoveEvent(event);
}
マウスを中央に置くコードをコメントアウトしました。これがうまくいくなら、私は左クリック領域に配置します。固定
人々は彼らのカーソルを「盗む」、あなたはこれをしたい理由について詳しく説明できることをアプリケーションに難色を示す傾向がありますか?おそらくもっと良い解決策があります。 – cmannett85
これはGUIを備えたアプリケーションですが、ウィジェットの1つは、一人称シューティングゲームのように画面の端に触れないようにマウスを必要とします。つまり、常に中央に留まります。 – RobotRock
しかし、入力したウィジェットはどのように残していますか?一人称シューティングゲームもカーソルを隠し、マウスの動きのデルタを使います。私はQGLWidgetを使用してCADデータを表示し、ユーザーはマウスを使用してシーンをナビゲートし、マウスイベントはすべてのピクセルの変更(リフレッシュレート)に与えられます。ですから、マウスイベントが高密度でないのはなぜでしょうか?あなたは 'QWidget :: mouseMoveEvent(QMouseEvent * event)'をオーバーライドしていますか? – cmannett85