Используя Qt5, я создал подкласс QOpenGLWidget и отображаю QImage через QPainter.
Теперь я хочу иметь возможность увеличивать и уменьшать масштаб по центру курсора мыши.
В цикле рисования I:
- Переместить начало координат на курсор мыши
- Масштабирование по коэффициенту масштабирования (устанавливается по событию колеса мыши)
- Переместить начало назад
void QOpenGLCanvas::paintGL()
{
QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
f->glClear(GL_COLOR_BUFFER_BIT);
QPainter painter(this);
if (!img.isNull())
{
QPoint mousePos = mapFromGlobal(QCursor::pos());
painter.translate(mousePos);
painter.scale(zoomfactor, zoomfactor);
painter.drawImage(-mousePos, img);
}
painter.end();
}
Это работает, когда мышь остается неподвижной, но заставляет изображение «прыгать», когда курсор перемещается между двумя событиями рисования.
Вот скриншот, чтобы показать, что происходит: https://www.youtube.com/watch?v=KyJ1xJGA0lQ
Я попытался сместить разницу на последнюю позицию курсора, но не смог заставить его работать. Чего мне не хватает?