updateGL () с QTimer - PullRequest
       1

updateGL () с QTimer

1 голос
/ 27 февраля 2012

У меня проблема с обновлением модели OpenGL на экране.Я использую таймер для обновления угла поворота на каждом шаге таймера:

QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(Spin()));
timer->start(500);

void GLWidget::Spin()
{
    qDebug() << "Spin()";

    rotationX  += 5;
    rotationY  += 5;
    rotationZ  += 5;
    updateGL();

}

Я также пробовал update () вместо updateGL (), но он также не работаетСтранная вещь, вращая модель с помощью мыши, она работает:

void GLWidget::mouseMoveEvent(QMouseEvent *event)
{
    GLfloat dx = GLfloat(event->x() - lastPos.x()) / width();
    GLfloat dy = GLfloat(event->y() - lastPos.y()) / height();
    if (event->buttons() & Qt::LeftButton) {
        rotationX += 180 * dy;
        rotationY += 180 * dx;
        updateGL();
    } else if (event->buttons() & Qt::RightButton) {
    rotationX += 180 * dy;
        rotationZ += 180 * dx;
        updateGL();
    }
    lastPos = event->pos();
}

1 Ответ

1 голос
/ 27 февраля 2012

Попробуйте позвонить QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags flags) после вызова updateGL() в Spin(), чтобы принудительно переместить вызов отрисовки в очередь рисования.

Я бы использовал метод грубой силы для вызова repaint(), это полностью обходит очередь событий и немедленно вызывает paintEvent().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...