Qt对于translate()和rotate()的理解,QPainter画家用translate()和rotate()函数实现图片的旋转例子

对于translate()和rotate()的理解

这是我载入的一张图片,arrow.png,载入的图片为箭头图片,保存在pixmap中
在这里插入图片描述
1.translote(x,y)
这个函数简单来说就是实现对坐标原点的重新定义,参数为重新定义的x坐标,y坐标
在这里插入图片描述
现在我来设置一个画家p,他是在pixmap上进行绘制的
我们没有用translote()重新定义坐标原点时,此时的默认的坐标如下图所示
Qt对于translate()和rotate()的理解,QPainter画家用translate()和rotate()函数实现图片的旋转例子_第1张图片

它是以箭头图片左上角的点为坐标系原点,图片被我放大的十倍,所以出现了失真,不过不影响演示

但我们调用translote()重新定义坐标原点时,如果此时我们将坐标原点设在箭头图片的中间

p.translate(pixmap.width() / 2, pixmap.height() / 2);

假设图片的像素宽为14,高为14,我们将原点设在图片中间,也就是(7,7)
当函数p.translate(pixmap.width() / 2, pixmap.height() / 2);执行后,此时的坐标原点如下图所示
Qt对于translate()和rotate()的理解,QPainter画家用translate()和rotate()函数实现图片的旋转例子_第2张图片
而原来的原点坐标变为(-7,-7);
2.rotate(int angle)
这个函数是实现对图形的旋转等操作,参数为顺时针旋转的角度,以原点为中心旋转
但我们在p.translate(pixmap.width() / 2, pixmap.height() / 2);对坐标重新定义的基础上

p.rotate(90);	//旋转角度,顺时针旋转

执行完这个函数后,此时的图形已经变为这样,如下图
Qt对于translate()和rotate()的理解,QPainter画家用translate()和rotate()函数实现图片的旋转例子_第3张图片

如果我们不对坐标重新定义,直接调用rotate()函数旋转图形,自己可以想象,图片位置会跑偏、
当我们要恢复默认的坐标原点时,调用restore()函数即可

总结:

其实有很多类似的例子,如QQ联系人界面的这个变化的图标,当联系人不展开时如图

Qt对于translate()和rotate()的理解,QPainter画家用translate()和rotate()函数实现图片的旋转例子_第4张图片
当展开时
Qt对于translate()和rotate()的理解,QPainter画家用translate()和rotate()函数实现图片的旋转例子_第5张图片
调用这两个函数,可以实现很多炫酷的操作,开销也会很小,如汽车仪表盘的指针变化,电压表等表盘的指针变化,都可以
Qt对于translate()和rotate()的理解,QPainter画家用translate()和rotate()函数实现图片的旋转例子_第6张图片
要实现更多的骚操作,可以自己去摸索和创新
在这里插入图片描述

你可能感兴趣的:(qt5,c++)