Мне нужно интегрировать ползунок масштабирования для QGraphicsView
в Qt 4.x, у меня есть рабочая реализация, которая выглядит примерно так:
connect(slider, SIGNAL(valueChanged(int)), customGraphicsView, SLOT(setZoomLevel(int));
В слоте для setZoomLevel
у меня стоит
void CustomView::setZoomLevel(int level)
{
if(zoomLevel - level < -1){
setZoomLevel(level - 1);
}else if(level - zoomLevel < -1){
setZoomLevel(level + 1);
}
if(level < zoomLevel){
scale(1 - (scaleFactor * (zoomLevel - level)), 1 - (scaleFactor * (zoomLevel - level)));
}else if (level > zoomLevel){
scale(1 + (scaleFactor * (level - zoomLevel)), 1 + (scaleFactor * (level - zoomLevel)));
}
zoomLevel = level;
}
Итак, моя проблема связана с сопряжением ползунка, который имеет значение от n до m для представления уровня масштабирования, с функцией scale()
QGraphicsView
, которая принимает два значения с плавающей запятой, чтобы умножить сцену, чтобы получить новый размер.
Итак, проблема, с которой я сталкиваюсь, заключается в том, что если вы возьмете 1 *0,9 *1,1, вы все равно получите не 1, а вместо 0,99, это немного неправильно, потому что это неправильная формула. Так что мой максимальный зум со временем становится все меньше и меньше.
Рекурсивные вызовы связаны с тем, что ползунок иногда пропускал значения на быстрых слайдах, что увеличивало «ошибку», поэтому я сгладил его, чтобы немного перевязать.
Есть ли правильный способ обработки масштабирования?