分类: C/C++
2007-01-04 19:02:14
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);
这样的话,就不能够实现旋转了,必须是在旋转过的坐标系统中再画矩形。