Реализация ползунка масштабирования QGraphicsView

Мне нужно интегрировать ползунок масштабирования для 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, это немного неправильно, потому что это неправильная формула. Так что мой максимальный зум со временем становится все меньше и меньше.

Рекурсивные вызовы связаны с тем, что ползунок иногда пропускал значения на быстрых слайдах, что увеличивало «ошибку», поэтому я сгладил его, чтобы немного перевязать.

Есть ли правильный способ обработки масштабирования?

5
задан John Lotacs 30 July 2012 в 14:55
поделиться