QT 坐标变换

所谓坐标变换就是给painter加上一些变换矩阵。比如,在调用了rotate(int angle)方法之后painter的世界被旋转了一个角度,tanslate(int dx,int dy)之后painter的整个世界向右拖了dx,又向下拖了dy。所以,坐标变换可以看做是painter当前的一个状态,我们可以用save()方法把当前的状态存到一个堆栈里,在用过之后,再用restore()恢复,看一个例子。
 
?
painter->translate(50, 50);
painter->save();
painter->rotate(45);
painter->drawLine(0, -5, 0, -20);
painter->restore();
painter->drawLine(0, -5, 0, -20);
 
因为坐标变换会带来浮点误差,所以做好save,restore工作是必要的。
有趣的是,变换方法互相也会影响。
?
painter->setPen(QPen(Qt::black, 4));
painter->translate(50, 10);
painter->drawText(0, 0, tr("1"));
painter->translate(0, 50);
painter->drawRect(0,0,5,5);
painter->rotate(45);
painter->translate(0, -50);
painter->drawText(0, 0, tr("2"));
 
 我们可以用QTransform类把坐标变化存下来,以便反复使用。
?
QTransform transform;
transform.translate(50, 50);
transform.rotate(45);
painter->setWorldTransform(transform);
painter->drawLine(0, -5, 0, -20);
还有一个有用的方法是painter的worldTransform(),能得到这个画笔当前的变换矩阵。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值