Qt4.xにズームスライダーを統合する必要があります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の値を持つスライダーを、のscale()
関数に結合することから生じています。この関数はQGraphicsView
、2つの浮動小数点値を使用して、シーンに新しいサイズを取得します。
したがって、私が抱えている問題は、1 * .9 * 1.1をとった場合でも、1は得られず、代わりに.99が得られるということです。これは、正しい数式ではないため、わずかにずれています。したがって、私の最大ズームは時間の経過とともにますます小さくなります。
再帰呼び出しは、スライダーが高速スライドの値をスキップすることがあり、「エラー」が増加したためです。そのため、スライダーを滑らかにして少し包帯を巻いたのです。
ズームを処理する正しい方法はありますか?