性能:
以鼠标地位为中心点定点缩放
原理阐明
实现在光标地位缩放画布的成果能够了解为,光标所对应到画布上的坐标点在缩放之前和之后都持续对应在光标所在的地位。而个别缩放画布,画布会以画布的左上角为固定点缩放。
所以在每一次缩放实现后,咱们须要把画布上 光标对应的地位 挪动回去,就能够实现目标成果。
a.计算原理:
1.找到光标所对应到画布坐标零碎的地位点,这里记作target
2.缩放(参见如下代码块)
3.按缩放比例计算失去 经验缩放后 target的新地位_target
4.计算位移量
5.挪动画布
缩放局部
#define ZOOM_IN_TIMES -5
#define ZOOM_OUT_TIMES 5
void scaledemo::wheelEvent(QWheelEvent *event)
{
qreal s=0;
bool in = true;
bool out = true;
if(event->delta() >= 0)
{
scaleValue += 1;
}
if(event->delta() < 0)
{
scaleValue -= 1;
}
if( scaleValue < ZOOM_IN_TIMES )
{
scaleValue = ZOOM_IN_TIMES;
in = false;
return;
}else if( scaleValue > ZOOM_OUT_TIMES )
{
scaleValue = ZOOM_OUT_TIMES;
out = false;
return;
}
if(in)
{
s = qPow(1.01,event->delta()/10);
}
if(out)
{
s = qPow(1/1.01,-event->delta()/10);
}
scale(s,s);
}
发表回复