Есть QWidget внутри QScrollArea, который является картой (прорисовка карты осуществляется в paintEvent).
Необходимо менять масштаб карты, для этого я увеличиваю/уменьшаю размер виджета.
Проблема в том что при изменении размеров позиция виджета (точка в центре QScrollArea) сдвигается, а мне надо ее сохранить.
Приведенный ниже код работает не совсем так как хотелось бы позиция виджета постепенно сдвигается при увеличении.
void MainWindow::slotIncreaseScale(void)
{
float dx,dy;
if (scrollArea->horizontalScrollBar()->isVisible() == true)
{
dx = (float)scrollArea->horizontalScrollBar()->value()/(scrollArea->horizontalScrollBar()->maximum()-scrollArea->horizontalScrollBar()->minimum());
dy = (float)scrollArea->verticalScrollBar()->value()/(scrollArea->verticalScrollBar()->maximum()-scrollArea->verticalScrollBar()->minimum());
}
umap->setFixedSize(umap->width()*1.5,umap->height()*1.5);
if (scrollArea->horizontalScrollBar()->isVisible() == true)
{
scrollArea->horizontalScrollBar()->setValue(dx*(scrollArea->horizontalScrollBar()->maximum()-scrollArea->horizontalScrollBar()->minimum()));
scrollArea->verticalScrollBar()->setValue(dy*(scrollArea->verticalScrollBar()->maximum()-scrollArea->verticalScrollBar()->minimum()));
}
}
Здесь я пропорционально увеличиваю соотношение QScrollArea->horizontalScrollBar->value()/(scrollArea->horizontalScrollBar()->maximum()-scrollArea->horizontalScrollBar()->minimum())
QScrollArea->verticalScrollBar->value()/(scrollArea->verticalScrollBar()->maximum()-scrollArea->verticalScrollBar()->minimum())