标签:QGraphicsView Qt 缩放 ZOOM TIMES 画布 scaleValue event
功能:
以鼠标位置为中心点定点缩放
原理说明
实现在光标位置缩放画布的效果可以理解为,光标所对应到画布上的坐标点在缩放之前和之后都继续对应在光标所在的位置。而一般缩放画布,画布会以画布的左上角为固定点缩放。
所以在每一次缩放完成后,我们需要把画布上 光标对应的位置 移动回去,就可以实现目的效果。
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);
}
标签:QGraphicsView,Qt,缩放,ZOOM,TIMES,画布,scaleValue,event 来源: https://www.cnblogs.com/zoule/p/14862490.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。