Tengo una necesidad de integrar un control de zoom para un QGraphicsView
en Qt 4.x, tengo una aplicación de trabajo que va más o menos así:deslizador de zoom QGraphicsView
connect(slider, SIGNAL(valueChanged(int)), customGraphicsView, SLOT(setZoomLevel(int));
En la ranura para setZoomLevel
tengo la siguiente
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;
}
Así que mi problema se derivan de acoplamiento de un cursor que tiene un valor de n a m para representar un nivel de zoom a la función scale()
de QGraphicsView
, que toma dos valores de coma flotante para multiplicar la escena por t o obtener un nuevo tamaño.
Así que el problema que estoy teniendo es, si toma 1 * .9 * 1.1 todavía no recibe 1, pero en cambio .99, se apaga un poco porque no es una fórmula correcta. Así que mi zoom máximo se hace más pequeño y más pequeño con el tiempo.
Las llamadas recursivas se deben a que el control deslizante a veces saltaba los valores en las diapositivas rápidas, lo que aumentaba el "error", por lo que lo alisé un poco.
¿Hay una forma correcta de manejar los acercamientos?
Muchas gracias. Esto realmente debería mencionarse en la documentación bajo escala(). –