亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? qt教程一 —— 第十一章:給它一個炮彈.htm

?? 嵌入式QT開發系列文檔
?? HTM
?? 第 1 頁 / 共 2 頁
字號:

<P><PRE>    void CannonField::moveShot()
    {
        <A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qregion.html">QRegion</A> r( shotRect() );
        timerCount++;

        <A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qrect.html">QRect</A> shotR = shotRect();

    <A name=x2307></A>    if ( shotR.<A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qrect.html#x">x</A>() &gt; width() || shotR.<A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qrect.html#y">y</A>() &gt; height() )
    <A name=x2310></A>        autoShootTimer-&gt;<A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qtimer.html#stop">stop</A>();
        else
    <A name=x2305></A>        r = r.<A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qrect.html#unite">unite</A>( QRegion( shotR ) );
        <A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qwidget.html#repaint">repaint</A>( r );
    }
</PRE>
<P>moveShot()是一個移動射擊的槽,當<A 
href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qtimer.html">QTimer</A>開始的時候,每50毫秒被調用一次。 

<P>它的任務就是計算新的位置,重新畫屏幕并把炮彈放到新的位置,并且如果需要的話,停止定時器。 
<P>首先我們使用<A 
href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qregion.html">QRegion</A>來保留舊的shotRect()。<A 
href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qregion.html">QRegion</A>可以保留任何種類的區域,并且我們可以用它來簡化繪畫過程。shotRect()返回現在炮彈所在的矩形——稍后我們會詳細介紹。 

<P>然后我們增加<TT>timerCount</TT>,用它來實現炮彈在它的軌跡中移動的每一步。 
<P>下一步我們算出新的炮彈的矩形。 
<P>如果炮彈已經移動到窗口部件的右面或者下面的邊界,我們停止定時器或者添加新的shotRect()到QRegion。 
<P>最后,我們重新繪制QRegion。這將會發送一個單一的繪畫事件,但僅僅有一個到兩個舉行需要刷新。 
<P><PRE>    void CannonField::<A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qwidget.html#paintEvent">paintEvent</A>( <A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qpaintevent.html">QPaintEvent</A> *e )
    {
    <A name=x2301></A>    <A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qrect.html">QRect</A> updateR = e-&gt;<A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qpaintevent.html#rect">rect</A>();
        <A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qpainter.html">QPainter</A> p( this );

    <A name=x2302></A>    if ( updateR.<A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qrect.html#intersects">intersects</A>( cannonRect() ) )
            paintCannon( &amp;p );
        if ( autoShootTimer-&gt;<A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qtimer.html#isActive">isActive</A>() &amp;&amp;
             updateR.<A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qrect.html#intersects">intersects</A>( shotRect() ) )
            paintShot( &amp;p );
    }
</PRE>
<P>繪畫事件函數在前一章中已經被分成兩部分了。現在我們得到的新的矩形區域需要繪畫,檢查加農炮和/或炮彈是否相交,并且如果需要的話,調用paintCannon()和/或paintShot()。 

<P><PRE>    void CannonField::paintShot( <A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qpainter.html">QPainter</A> *p )
    {
        p-&gt;<A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qpainter.html#setBrush">setBrush</A>( black );
        p-&gt;<A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qpainter.html#setPen">setPen</A>( NoPen );
    <A name=x2298></A>    p-&gt;<A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qpainter.html#drawRect">drawRect</A>( shotRect() );
    }
</PRE>
<P>這個私有函數畫一個黑色填充的矩形作為炮彈。 
<P>我們把paintCannon()的實現放到一邊,它和前一章中的paintEvent()一樣。 
<P><PRE>    QRect CannonField::shotRect() const
    {
        const double gravity = 4;

        double time      = timerCount / 4.0;
        double velocity  = shoot_f;
        double radians   = shoot_ang*3.14159265/180;

        double velx      = velocity*cos( radians );
        double vely      = velocity*sin( radians );
    <A name=x2304></A>    double x0        = ( barrelRect.<A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qrect.html#right">right</A>()  + 5 )*cos(radians);
        double y0        = ( barrelRect.<A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qrect.html#right">right</A>()  + 5 )*sin(radians);
        double x         = x0 + velx*time;
        double y         = y0 + vely*time - 0.5*gravity*time*time;

        <A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qrect.html">QRect</A> r = QRect( 0, 0, 6, 6 );
    <A name=x2303></A>    r.<A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qrect.html#moveCenter">moveCenter</A>( QPoint( qRound(x), height() - 1 - qRound(y) ) );
        return r;
    }
</PRE>
<P>這個私有函數計算炮彈的中心點并且返回封裝炮彈的矩形。它除了使用自動增加所過去的時間的<TT>timerCount</TT>之外,還使用初始時的加農炮的力量和角度。 

<P>運算公式使用的是有重力的環境下光滑運動的經典牛頓公式。簡單地說,我們已經選擇忽略愛因斯坦理論的結果。 
<P>我們在一個y坐標向上增加的坐標系統中計算中心點。在我們計算出中心點之后,我們構造一個6*6大小的<A 
href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qrect.html">QRect</A>,并把它的中心移動到我們上面所計算出的中心點。同樣的操作我們把這個點移動到窗口部件的坐標系統(請看<A 
href="http://www.qtopia.org.cn/doc/qiliang.net/qt/coordsys.html">坐標系統</A>)。 
<P>qRound()函數是一個在qglobal.h中定義的內嵌函數(被其它所有Qt頭文件包含)。qRound()把一個雙精度實數變為最接近的整數。 
<P>
<H3><A 
href="http://www.qtopia.org.cn/doc/qiliang.net/qt/t11-main-cpp.html">t11/main.cpp</A> 
</H3><A name=1-3></A>
<P>
<P><PRE>    class MyWidget: public <A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qwidget.html">QWidget</A>
    {
    public:
        MyWidget( <A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qwidget.html">QWidget</A> *parent=0, const char *name=0 );
    };
</PRE>
<P>唯一的增加是Shoot按鈕。 
<P><PRE>        <A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qpushbutton.html">QPushButton</A> *shoot = new <A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qpushbutton.html">QPushButton</A>( "&amp;Shoot", this, "shoot" );
        shoot-&gt;<A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qwidget.html#setFont">setFont</A>( QFont( "Times", 18, QFont::Bold ) );
</PRE>
<P>在構造函數中我們創建和設置Shoot按鈕就像我們對Quit按鈕所做的那樣。注意構造函數的第一個參數是按鈕的文本,并且第三個是窗口部件的名稱。 
<P><PRE>        <A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qobject.html#connect">connect</A>( shoot, SIGNAL(<A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qbutton.html#clicked">clicked</A>()), cannonField, SLOT(shoot()) );
</PRE>
<P>把Shoot按鈕的clicked()信號和CannonField的shoot()槽連接起來。 
<P>
<H2>行為 </H2><A name=2></A>
<P>The cannon can shoot, but there's nothing to shoot at. 
<P>(請看<A 
href="http://www.qtopia.org.cn/doc/qiliang.net/qt/tutorial1-07.html#compiling">編譯</A>來學習如何創建一個makefile和連編應用程序。) 

<P>
<H2>練習 </H2><A name=3></A>
<P>用一個填充的圓來表示炮彈。提示:<A 
href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qpainter.html#drawEllipse">QPainter::drawEllipse</A>()會對你有所幫助。 

<P>當炮彈在空中的時候,改變加農炮的顏色。 
<P>現在你可以進行<A 
href="http://www.qtopia.org.cn/doc/qiliang.net/qt/tutorial1-12.html">第十二章</A>了。 
<P>[<A 
href="http://www.qtopia.org.cn/doc/qiliang.net/qt/tutorial1-10.html">上一章</A>] 
[<A 
href="http://www.qtopia.org.cn/doc/qiliang.net/qt/tutorial1-12.html">下一章</A>] 
[<A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/tutorial.html">教程一主頁</A>] 
<P><!-- eof -->
<P>
<ADDRESS>
<HR>

<DIV align=center>
<TABLE cellSpacing=0 width="100%" border=0>
  <TBODY>
  <TR>
    <TD>Copyright &copy; 2002 <A href="http://www.trolltech.com/">Trolltech</A> 
    <TD><A href="http://www.trolltech.com/trademarks.html">Trademarks</A> 
    <TD><A 
      href="http://www.qtopia.org.cn/doc/qiliang.net/qt/zh_CN.html">譯者:Cavendish</A> 

    <TD align=right>
      <DIV align=right>Qt 
3.0.5版</DIV></TR></TBODY></TABLE></DIV></ADDRESS></BODY></HTML>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线精品视频| 精品无码三级在线观看视频 | 亚洲国产精品久久人人爱蜜臀| 国产成人精品1024| 国产精品久久久久久久久免费相片| 国产精品白丝av| 国产精品拍天天在线| 99久久亚洲一区二区三区青草| 1000精品久久久久久久久| 色婷婷久久一区二区三区麻豆| 一个色妞综合视频在线观看| 欧美一级高清片| 韩国av一区二区三区在线观看| 国产日韩欧美一区二区三区乱码| 不卡一区二区三区四区| 亚洲福利视频三区| 精品免费国产二区三区| 成人app软件下载大全免费| 亚洲已满18点击进入久久| 日韩欧美国产一区二区在线播放| 国产成人高清视频| 亚洲成av人影院| 精品国产成人在线影院| 91亚洲国产成人精品一区二三 | 欧美日韩一区在线观看| 麻豆国产一区二区| 亚洲日本电影在线| 欧美一区二区三区啪啪| 成a人片亚洲日本久久| 天堂蜜桃91精品| 中文在线一区二区| 69成人精品免费视频| 成人一区在线观看| 日韩在线播放一区二区| 国产精品免费看片| 欧美一区二区三区影视| 91在线云播放| 国产一区二区三区日韩| 亚洲成人av在线电影| 欧美国产精品中文字幕| 日韩一区二区影院| 一本大道av一区二区在线播放| 免费精品99久久国产综合精品| 自拍偷自拍亚洲精品播放| 精品少妇一区二区三区免费观看| 99久久国产综合精品色伊| 久久成人精品无人区| 亚洲综合色婷婷| 亚洲国产激情av| 亚洲精品一区二区三区在线观看| 欧美在线三级电影| 成人av资源站| 高潮精品一区videoshd| 久久国产三级精品| 日本视频中文字幕一区二区三区| 中文字幕一区二区三区在线不卡| 欧美精品一区二区三区四区 | 亚洲国产精品一区二区www在线| 国产欧美日韩三级| 欧美成人艳星乳罩| 欧美三级电影网站| 色欧美88888久久久久久影院| 国产成人精品www牛牛影视| 国内精品视频666| 精一区二区三区| 久久国产精品第一页| 视频一区在线播放| 日韩1区2区日韩1区2区| 一区二区三区波多野结衣在线观看 | 色综合久久六月婷婷中文字幕| 国产精品自产自拍| 韩国av一区二区三区| 国产主播一区二区三区| 美女免费视频一区| 麻豆一区二区99久久久久| 日韩国产一二三区| 性做久久久久久免费观看| 一二三四社区欧美黄| 亚洲国产一二三| 亚洲成人动漫在线免费观看| 日日夜夜免费精品| 日韩成人一区二区| 美女看a上一区| 国产原创一区二区三区| 成人妖精视频yjsp地址| 波多野结衣亚洲| 色综合久久中文字幕| 欧洲精品中文字幕| 欧美色精品在线视频| 在线播放91灌醉迷j高跟美女| 欧美电影在线免费观看| 日韩三级.com| 欧美高清一级片在线观看| 1024国产精品| 亚洲.国产.中文慕字在线| 美女一区二区视频| 高清国产午夜精品久久久久久| 成人黄色av电影| 欧美日韩亚州综合| 日韩欧美在线不卡| 国产三级一区二区三区| 亚洲另类在线一区| 蜜臀av性久久久久蜜臀aⅴ四虎 | 6080午夜不卡| 精品国产青草久久久久福利| 国产欧美精品一区二区色综合| 亚洲视频在线一区观看| 亚州成人在线电影| 国产成人综合亚洲91猫咪| 91小视频在线| 日韩欧美国产麻豆| 中文字幕一区二区三区乱码在线| 亚洲国产一区二区a毛片| 久久国产成人午夜av影院| 91在线观看美女| 欧美一卡2卡3卡4卡| 中国色在线观看另类| 午夜欧美在线一二页| 国产乱码精品一区二区三区av| 91丨九色porny丨蝌蚪| 日韩欧美国产一二三区| 亚洲少妇屁股交4| 免费人成网站在线观看欧美高清| 成人中文字幕合集| 91精品国产美女浴室洗澡无遮挡| 国产精品视频免费| 日韩av一区二区在线影视| 成人高清在线视频| 日韩欧美第一区| 玉米视频成人免费看| 国产成人精品免费网站| 91精品国产高清一区二区三区| 国产精品免费aⅴ片在线观看| 日韩电影免费一区| 色综合天天综合狠狠| 精品处破学生在线二十三| 亚洲国产cao| 99精品久久免费看蜜臀剧情介绍 | 久久久久久久免费视频了| 午夜影院在线观看欧美| 99精品1区2区| 国产色一区二区| 国产一区二区三区精品视频| 欧美巨大另类极品videosbest | 中文字幕一区二区三区在线播放| 久久国产精品免费| 欧美日本国产视频| 伊人一区二区三区| av中文一区二区三区| 久久―日本道色综合久久| 蜜臀久久99精品久久久久宅男| 欧美日韩精品综合在线| 一区二区三区在线视频观看58| 成人国产免费视频| 国产欧美一区二区精品仙草咪| 精品在线免费观看| 欧美一级午夜免费电影| 日本最新不卡在线| 91麻豆精品国产综合久久久久久| 亚洲综合丁香婷婷六月香| 91精品91久久久中77777| 1区2区3区精品视频| 99精品1区2区| 亚洲美女免费视频| 色老汉一区二区三区| 亚洲激情av在线| 欧美视频精品在线观看| 亚洲国产精品一区二区久久恐怖片 | 337p亚洲精品色噜噜狠狠| 亚洲www啪成人一区二区麻豆| 欧美日本一区二区| 日本欧美在线看| 日韩一区二区免费在线观看| 免费人成在线不卡| 精品久久一区二区| 国产美女久久久久| 国产精品短视频| 色哟哟日韩精品| 亚洲一二三四区不卡| 欧美日韩国产中文| 麻豆国产精品官网| 久久久国际精品| 成人精品免费网站| 亚洲欧美日韩中文字幕一区二区三区 | 亚洲免费三区一区二区| 91国在线观看| 午夜视黄欧洲亚洲| 欧美精品一区视频| 99精品国产一区二区三区不卡| 夜夜嗨av一区二区三区四季av| 欧美精品自拍偷拍| 国产真实精品久久二三区| 国产亚洲午夜高清国产拍精品| 成人精品视频一区二区三区尤物| 亚洲猫色日本管| 制服.丝袜.亚洲.另类.中文 | 青青草国产精品亚洲专区无| 精品免费日韩av| 99久久久久久99| 日韩电影一二三区|