Mam potrzebę włączenia suwak powiększenia na QGraphicsView
w Qt 4.x, mam pracę, że idzie wdrożenie coś takiego:Wdrażanie suwak zoom QGraphicsView
connect(slider, SIGNAL(valueChanged(int)), customGraphicsView, SLOT(setZoomLevel(int));
w gnieździe na setZoomLevel
mam następujące
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;
}
Więc mój problem jest wynikająca z parzeniem suwak, który ma wartość n do m do reprezentowania poziomu powiększenia do funkcji scale()
z QGraphicsView
, który trwa dwie wartości zmiennoprzecinkowych pomnożyć sceny przez t o uzyskać nowy rozmiar.
Problem polega na tym, że jeśli weźmiesz 1 * .9 * 1.1, nadal nie otrzymasz 1, ale zamiast tego .99, nieznacznie się wyłączy, ponieważ nie jest to poprawna formuła. Mój maksymalny zoom z czasem staje się coraz mniejszy.
Wywołania rekursywne polegają na tym, że suwak czasami pomijał wartości na szybkich slajdach, co zwiększało "błąd", więc wygładziłem go, aby nieco go bandażować.
Czy jest prawidłowy sposób obsługi powiększenia?
Dziękuję bardzo. To powinno być naprawdę wspomniane w dokumentacji pod skalą(). –