qt编程教学计划.doc

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
qt编程教学计划

qt编程教学计划 篇一:QT编程例子 第一个例子 在这个例子里我们介绍了一个定时器来实现动画的射击。 ? ? ? ? ? t11/lcdrange.h包含LCDRange类定义。 t11/lcdrange.cpp包含LCDRange类实现。 t11/cannon.h包含CannonField类定义。 t11/cannon.cpp包含CannonField类实现。 t11/main.cpp包含MyWidget和main。 (1)t11/cannon.h CannonField现在就有了射击能力。 void shoot(); 当炮弹不在空中,调用这个槽会使加农炮射击。 private slots: void moveShot(); 当炮弹正在空中时,这个私有槽使用一个定时器来移动射击。 private: void paintShot( QPainter * ); 这个函数来画射击。 QRect shotRect() const; 当炮弹正在空中的时候,这个私有函数返回封装它所占用空间的矩形,否则它就返回一个没有定义的矩形。 int timerCount; QTimer * autoShootTimer; float shoot_ang; float shoot_f; 这些私有变量包含了描述射击的信息。timerCount保留了射击进行后的时间。shoot_ang是加农炮射击时的角度,shoot_f是射击时加农炮的力量。 (2)t11/cannon.cpp #include math.h 我们包含了数学库,因为我们需要使用sin()和cos()函数。 CannonField::CannonField( QWidget *parent, const char *name ) : QWidget( parent, name ) { ang = 45; f = 0; timerCount = 0; autoShootTimer = new QTimer( this, movement handler ); connect( autoShootTimer, SIGNAL(timeout()), this, SLOT(moveShot()) ); shoot_ang = 0; shoot_f = 0; setPalette( QPalette( QColor( 250, 250, 200) ) ); } 我们初始化我们新的私有变量并且把QTimer::timeout()信号和我们的moveShot()槽相连。我们会在定时器超时的时候移动射击。 void CannonField::shoot() { if ( autoShootTimer-isActive() ) return; timerCount = 0; shoot_ang = ang; shoot_f = f; autoShootTimer-start( 50 ); } 只要炮弹不在空中,这个函数就会进行一次射击。timerCount被重新设置为零。 shoot_ang和shoot_f设置为当前加农炮的角度和力量。最后,我们开始这个定时器。void CannonField::moveShot() { QRegion r( shotRect() ); timerCount++; QRect shotR = shotRect(); if ( shotR.x() width() || shotR.y() height() ) autoShootTimer-stop(); else r = r.unite( QRegion( shotR ) ); repaint( r ); } moveShot()是一个移动射击的槽,当QTimer开始的时候,每50毫秒被调用一次。它的任务就是计算新的位置,重新画屏幕并把炮弹放到新的位置,并且如果需要的话,停止定时器。 首先我们使用QRegion来保留旧的shotRect()。QRegion可以保留任何种类的区域,并且我们可以用它来简化绘画过程。shotRect()返回现在炮弹所在的矩形——稍后我们会详细介绍。 然后我们增加timerCount,用它来实现炮弹在它的轨迹中移动的每一步。 下一步我们算出新的炮弹的矩形。如果炮弹已经移动到窗口部件的右面或者下面的边界,我们停止定时器或者添加新的shotRect()到QRegion。 最后,我们重新绘制QRegion。这将会发送一个单一的绘画事件,但仅仅有一个到两个举行需要刷新。 void CannonField::paintEvent( QPaintE

文档评论(0)

1045141460 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档