Реализация scalling-а
This commit is contained in:
32
Canvas.cpp
32
Canvas.cpp
@@ -49,6 +49,26 @@ void Canvas::changeMode(Mode _mode)
|
||||
mode = _mode;
|
||||
}
|
||||
|
||||
void Canvas::zoomIn()
|
||||
{
|
||||
scaleFactor += ZOOM_STEP;
|
||||
update();
|
||||
}
|
||||
|
||||
void Canvas::zoomOut()
|
||||
{
|
||||
scaleFactor -= ZOOM_STEP;
|
||||
if (scaleFactor < 0.1) // Минимальный масштаб 10%
|
||||
scaleFactor = 0.1;
|
||||
update();
|
||||
}
|
||||
|
||||
void Canvas::zoomReset()
|
||||
{
|
||||
scaleFactor = 1.0;
|
||||
update();
|
||||
}
|
||||
|
||||
// ===================================================================
|
||||
// Методы поиска и проверки
|
||||
// ===================================================================
|
||||
@@ -567,7 +587,7 @@ void Canvas::paintEvent(QPaintEvent* event)
|
||||
QPainter p(this);
|
||||
p.setRenderHint(QPainter::Antialiasing, true);
|
||||
p.translate(width() / 2.0, height() / 2.0);
|
||||
p.scale(1.0, -1.0);
|
||||
p.scale(scaleFactor, -scaleFactor);
|
||||
|
||||
p.setPen(Qt::red);
|
||||
p.drawLine(-5, 0, 5, 0);
|
||||
@@ -680,7 +700,14 @@ void Canvas::keyPressEvent(QKeyEvent* event)
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case Qt::Key_Plus:
|
||||
zoomIn();
|
||||
break;
|
||||
|
||||
case Qt::Key_Minus:
|
||||
zoomOut();
|
||||
break;
|
||||
default:
|
||||
QWidget::keyPressEvent(event);
|
||||
}
|
||||
@@ -717,7 +744,8 @@ QPointF Canvas::screenToLogical(const QPointF& screenPos) const
|
||||
logical.rx() -= width() / 2.0;
|
||||
logical.ry() -= height() / 2.0;
|
||||
|
||||
logical.ry() = -logical.ry();
|
||||
logical.rx() /= scaleFactor;
|
||||
logical.ry() /= -scaleFactor;
|
||||
|
||||
return logical;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user