StupidBeauty
Read times:797Posted at:Sun Jan 26 06:08:55 2014
- no title specified

Qt®4的Ruby教程翻译:第9章:加农炮狠厉害,Chapter 9: With Cannon You Can

Screenshot: With Cannon You CanScreenshot: With Cannon You Can


文件:

概述

在这个示例里,我们开始做出一些图形效果了,我们会绘制出一个可爱的蓝色小钢炮。只有cannon.rb这个文件与前一章不同。

一行行地研究

cannon.rb

def paintEvent(event)

painter = Qt::Painter.new(self)

我们现在要真正开始使用Qt::Painter了。我们创建一个会在此部件上操作的绘图器。

painter.setPen(Qt::NoPen)

Qt::Painter所绘制的图形中的边缘部分是使用画笔pen 来绘制的。这里,我们将它设置为Qt::NoPen,这就意味着,当我们绘制图形时,不会有特殊的边缘出现。

painter.setBrush(Qt::Brush.new(Qt::blue))

Qt::Painter填充一个矩形、圆形或别的什么东西时,它会使用画刷brush来填充所绘制的图形。这里,我们将它设置为使用一种实心的(solid)蓝色画刷。(我们还可以使用一个模式。)蓝色画刷会填充满我们所绘制的整个图形。

painter.translate(0, rect().height())

Qt::Painter::translate()函数会转换(translates)Qt::Painter的坐标系统(即,将它移动一个偏移量)。这里,我们将本部件的左下角设置为坐标的(0, 0)点。x和y的方向保持不变,也就是说,这个部件中所有的y坐标现在都是负数了。(参考坐标系统以了解Qt坐标系统的更多细节。)

painter.drawPie(Qt::Rect.new(-35, -35, 70, 70), 0, 90 * 16)

Qt::Painter::drawPie()函数按照指定的起始角度和弧长来在指定的矩形中绘制出一个饼状图形。角度值的单位是16分之1度。0度对应于3点钟方向。绘制的方向以逆时针方向为正方向。这里,我们在本部件的左下角绘制出一个四分之一圆。这个饼状图形会由蓝色填充,并且没有轮廓。

painter.rotate(-@currentAngle)

Qt::Painter::rotate()函数会将Qt::Painter的坐标系统围绕着原点做旋转。旋转值参数以度数(而不是以16分之1度为单位)为单位,并且其方向为顺时针方向。这里,我们将坐标系统向逆时针方向旋转@currentAngle度。

painter.drawRect(Qt::Rect.new(30, -5, 20, 10))

Qt::Painter::drawRect()函数绘制出指定的矩形。这时在,我们绘制出加农炮的炮筒。

当坐标系统被做过某种变换(平移、旋转、缩放或裁剪)时,通常就难以再想象出绘制的结果了。

在本示例中,坐标系统首先被平移,然后被旋转。假如矩形Qt::Rect.new(30, -5, 20, 10)只是被绘制在平移过后的坐标系统中,那么,看起来会是这样的:

incorrectincorrect

注意,矩形会被CannonField 部件的边框裁剪掉一部分。当我们旋转了坐标系统时,例如说旋转60度,该矩形会以(0, 0)为中心旋转,即为围绕左下角旋转,因为我们已经变换过坐标系统了。结果将会是这样:

correctcorrect

运行程序

当妳拖动滑动器时,所绘制的加农炮的角度也会随着变化。

练习

设置一个不同的画笔,而不是使用Qt::NoPen。设置一个模式画刷。

[下一篇: 10章 ]

未知美人

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands