Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5758188
  • 博文数量: 675
  • 博客积分: 20301
  • 博客等级: 上将
  • 技术积分: 7671
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-31 16:15
文章分类

全部博文(675)

文章存档

2012年(1)

2011年(20)

2010年(14)

2009年(63)

2008年(118)

2007年(141)

2006年(318)

分类: C/C++

2007-01-04 19:02:14

在QT4的手册中有一个加农炮的例子,刚开始看的时候,不是很明白它的坐标系统,后来看了一下关于坐标系统的一篇,才明白了是怎么实现的。
 void CannonField::paintEvent(QPaintEvent * /* event */)
{
QPainter painter(this);

painter.setPen(Qt::NoPen);
painter.setBrush(Qt::blue);

painter.translate(0, rect().height());
painter.drawPie(QRect(-35, -35, 70, 70), 0, 90 * 16);
painter.rotate(-currentAngle);
painter.drawRect(QRect(30, -5, 20, 10));
}

 painter.translate(0, rect().height());
在QT中默认左上角为坐标原点,在代码中有一个坐标的转换,将坐标原点转化为左下角。
 painter.drawPie(QRect(-35, -35, 70, 70), 0, 90 * 16);
在QT中矩阵是先定义一个顶点,附加矩阵的长度和宽度构建的,另外画一个pie的时候,需要指定起始角度和角度范围。角度是以一度的16分之一为单位的,0度是3点钟方向,即正右方。上面就是画一个以原点为中心的四分之一圆。
 painter.rotate(-currentAngle);
上面是指坐标系统旋转-currentAngle度,因为方向是以顺时针为正方向的,所以实际上是向逆时针方向转了currentAngle度。由于零度是在正右方,这样就显示了旋转指定角度。
 painter.drawRect(QRect(30, -5, 20, 10));
现在的坐标系统下画一个矩形,来作为加农炮的炮管!
注意是在现在的坐标系统下面,我们可以将
     painter.rotate(-currentAngle);
painter.drawRect(QRect(30, -5, 20, 10));
互换顺序为;
     painter.drawRect(QRect(30, -5, 20, 10));
 painter.rotate(-currentAngle);
这样的话,就不能够实现旋转了,必须是在旋转过的坐标系统中再画矩形。





阅读(4161) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~