ho una necessità di integrare un dispositivo di scorrimento dello zoom per una QGraphicsView
in Qt 4.x, ho un'implementazione di lavoro che va qualcosa come questo:Implementazione cursore dello zoom QGraphicsView
connect(slider, SIGNAL(valueChanged(int)), customGraphicsView, SLOT(setZoomLevel(int));
Nella slot per setZoomLevel
ho il seguente
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;
}
Quindi il mio problema derivante dall'attuale accoppiamento un cursore che ha un valore di n per m rappresentare un livello di zoom alla funzione scale()
di QGraphicsView
, che prende due valori in virgola mobile a moltiplicare la scena da t o ottieni una nuova taglia.
Quindi il problema che sto riscontrando è che se prendi 1 * .9 * 1.1 non ottieni ancora 1 ma invece .99, è leggermente off perché non è una formula corretta. Quindi il mio zoom massimo diventa sempre più piccolo nel tempo.
Le chiamate ricorsive sono perché il cursore salta a volte i valori sulle diapositive veloci, il che ha aumentato l'errore, quindi l'ho smussato per fasciarlo un po '.
Esiste un modo corretto per gestire gli zoom?
Grazie mille. Questo dovrebbe essere menzionato nella documentazione in scala(). –