Android-камера автофокус по требованию

После долгих разочарований, похоже, это работает. Кажется, проблема в том, что QGraphicsView 's transform не имеет ничего общего с ее положением прокрутки, поэтому поведение QGraphicsView::mapToScene(const QPoint&) const зависит как от положения прокрутки, так и от преобразования. Мне нужно было посмотреть на источник для mapToScene, чтобы понять это.

Учитывая это, вот что сработало: вспомните точку сцены, на которую указывает мышь, масштабируйте, сопоставьте точку сцены с координатами мыши , затем отрегулируйте полосы прокрутки, чтобы подвести эту точку под мышью:

void ZoomGraphicsView::wheelEvent(QWheelEvent* event)
{
   const QPointF p0scene = mapToScene(event->pos());

   qreal factor = std::pow(1.01, event->delta());
   scale(factor, factor);

   const QPointF p1mouse = mapFromScene(p0scene);
   const QPointF move = p1mouse - event->pos(); // The move
   horizontalScrollBar()->setValue(move.x() + horizontalScrollBar()->value());
   verticalScrollBar()->setValue(move.y() + verticalScrollBar()->value());
}
30
задан esarkis 5 November 2018 в 18:23
поделиться