Linux 版 (精华区)

发信人: tcpip (高级草包), 信区: Linux
标  题: Qt tutorial 9-------With Cannon You Can
发信站: 哈工大紫丁香 (2000年06月11日12:50:26 星期天), 转信

 

第九章: With Cannon You Can




在本例子中,我们第一次使用QPainter.我们用它绘制一个漂亮的大炮. 与前一章相比,仅 annon.cpp 是不同的. 

lcdrange.h包含了LCDRange类的定义. 
lcdrange.cpp 包含了LCDRange类的实现. 
cannon.h 包含了CannonField类的定义. 
cannon.cpp 包含CannonField类的实现. 
main.cpp 包含MyWidget 和 main. 
Makefile contains some rules for generating the meta object information necessary for signal/slot creation. 

代码逐行解释

cannon.cpp

void CannonField::paintEvent( QPaintEvent * )
{
QPainter p;
QBrush brush( blue );
QPen pen( NoPen );

为了绘制我们的控件,我们使用QPainter.QPainter 是Qt的描绘引擎(painting engine). 它可以在若干paint
装置上进行2D图形的着色.QWidgetsi是一个paint装置.详细的 细节见QPainter的文献. 

QPainter 使用QPen和QBrush.当brush指定了填充颜色或填充图案后,需要指定pen的
风格和颜色.在我们的paintEvent中,我们需要使用蓝色的brush(画刷),和无形的pen(画笔). 

p.begin( this );

调用begin()让painter在paint装置上开始绘画. 在这里,我们是在CannonField上画的. 

p.setBrush( brush );
p.setPen( pen );

这里,我们使用在上面创建的画笔和画刷. 

p.translate( 0, rect().bottom() );

translate() 函数转换QPainter的座标系, 比如,利用偏移量进行移动.在这里,我们设置控件的左下角为座标系
的原点.X,Y轴的方向没有改变.比如,所有的控件里的座标系的Y轴 都是向下的.(详情见座标系统). 

p.drawPie( QRect(-35, -35, 70, 70), 0, 90*16 );

drawPie()函数使用开始角度和弧长在指定
的矩形内绘制一个扇形.角度是以1/16度为单位的.零度的位置如同钟表上
的3点位置.绘制方向为逆时针方向.这里,我们在控件的左下角绘制了一个
四分之一圆.此扇形是蓝色的,而且,没有轮廓线. 

p.rotate( -ang );

rotate()函数可以使座标系统围绕(0,0)点旋转. 旋转的变元以 float形式给出(不再以1/16度为单位),并且,方向
是顺时针.这里,我们让座标系统逆时针方向旋转ang度. 

p.drawRect( QRect(33, -4, 15, 8) );

drawRect()函数绘制指定的矩形区域.这里, 我们绘制了大炮的炮管. 

座标系统在通过前面的转变(平移,旋转,放缩或切割)后,我们很难预料 绘制的效果. 

在这个例子中,座标系统首先被平移,然后是被旋转.如果在座标系统平移之后, 旋转之前,矩形
QRect(33,-4,15,8)看上去是这样的: 



注意,矩形被CannonField控件的边界剪去了一部分.当我们旋转座标系统时,比如
60度,矩形会围绕(0,0)旋转.由于我们已经把座标系统平移到控件的左下角,而它 恰恰是座标的原点.
结果看上去是这样的: 



p.end();

调用end()告诉painter在paint device上的绘制结束. We're done, except that we haven't explained why Windows didn't
dither this time. (我们必须这样做,只可惜,我们无法解释为什么窗口这时会抖动.?^ ^) 

int main( int argc, char **argv ) {
QApplication::setColorSpec( QApplication::CustomColor );

告诉Qt在这个程序中,我们将使用一个非缺省的颜色分配策略.一些分配策略
在某些程序中的效果可能很好,也可能很坏. 

CustomColor可以给予Windows中的Qt应用程序一些更好的颜色,但是
在X11中没有什么效果.它还有一些可选择参数,你可以阅读 文献获得详细的资料. 

程序行为

当操作滚动条时,大炮的角度会相应改变. 

你可以注意到大炮的讨厌的闪烁,尤其在一个慢机器上.在下一章,我们会改进它. 

练习

为CannonField控件设置一背景图片. 

你现在可以进入第十章了. 

[上一章] [下一章] [教程目录] 


Copyright ?1999 Troll Tech
Trademarks 
Qt version 1.44

 




--
"这一千多年没写诗了?"
"写了, 不过只写了两句."
"千年得两句, 一定是万古丽句了. 念来听听."
"好吧, 我现丑了" 太白星清了清嗓子, 浑厚的男中音在天庭响起:
大海啊, 都是水;
骏马啊, 四条腿;

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: tcpip.hit.edu.cn]
※ 修改:·tcpip 於 06月11日12:53:54 修改本文·[FROM: tcpip.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.499毫秒