Qt держать мышь по центру - PullRequest
1 голос
/ 19 марта 2012

Мне интересно, есть ли у кого-нибудь хитрость, чтобы держать положение мыши по центру в виджете (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);
}

Я закомментировал код, который будет держать мышь центрированным.Если бы это сработало, я бы поместил его в область левого клика.

1 Ответ

2 голосов
/ 01 июля 2012

Исправлено:

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;
        }

    }
    QPoint glob = mapToGlobal(QPoint(width()/2,height()/2));
    QCursor::setPos(glob);
    lastPos = QPoint(width()/2,height()/2);
    QGLWidget::mouseMoveEvent(event);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...