功能:
以鼠标位置为中心点定点缩放
原理说明
实现在光标位置缩放画布的效果可以理解为,光标所对应到画布上的坐标点在缩放之前和之后都继续对应在光标所在的位置。而一般缩放画布,画布会以画布的左上角为固定点缩放。
所以在每一次缩放完成后,我们需要把画布上 光标对应的位置 移动回去,就可以实现目的效果。
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);
}
网友评论