我有一個需要縮放滑塊集成在Qt 4.x的一個QGraphicsView
,我有一個工作的實現,是這樣的:實現縮放滑塊的QGraphicsView
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的值來表示縮放級別的QGraphicsView
的scale()
功能,這需要兩個浮點值的T乘以現場滑塊詞幹o獲得新的尺寸。
所以我遇到的問題是,如果你採取1 * .9 * 1.1,你不會得到1,而是0.99,它的關閉稍微有點因爲它不是一個正確的公式。所以隨着時間的推移,我的最大變焦越來越小。
遞歸調用是因爲滑塊有時會跳過快速幻燈片上的值,從而增加了「錯誤」,所以我將其平滑一點,以便對它進行繃帶處理。
是否有正確的方法來處理縮放?
非常感謝。 這應該在scale()中的文檔中真正提到。 – 2012-07-30 16:25:16