• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
              清源游民 gameogre@gmail.com

            關(guān)鍵特性

            縮放與旋轉(zhuǎn)
            QGraphicsView通過QGraphicsView::setMatrix()支持同QPainter一樣的仿射變換,通過對(duì)一個(gè)視圖應(yīng)用變換,你可以很容易地支持普通的導(dǎo)航特性如縮放與旋轉(zhuǎn)。下面是一個(gè)例子:
            class View:;public QGraphicsView
            {
            Q_OBJECT
            //.....
            public slots:
            void zoomIn() {scale(1.2,1.2);}
            void zoomOut() {scale(1/1.2,1/1.2);}
            void rotateLeft() {rotate(-10);}
            void rotateRight() {rotate(10);}
            };
            這些槽應(yīng)與QToolButtons聯(lián)接,并使autoRepeat有效。當(dāng)對(duì)視圖變換時(shí),QGraphicsView會(huì)對(duì)視圖中心進(jìn)行校正。

            拖拽
            因?yàn)镼GraphicsView繼承自QWidget,它也提供了像QWidget那樣的拖拽功能,另處,為了方便,Graphics View柜架也為場(chǎng)景,每個(gè)item提供拖拽支持。當(dāng)視圖接收到拖拽事件,它可翻譯為QGraphicsSceneDragDropEvent,再發(fā)送到場(chǎng)景。場(chǎng)景接管這個(gè)事件,把它發(fā)送到光標(biāo)下接受拖拽的第一個(gè)item。
            從一個(gè)item開始拖拽時(shí),創(chuàng)建一個(gè)QDrag對(duì)象,傳遞開始拖拽的那個(gè)widget的指針。Items可以同時(shí)被多個(gè)視圖觀察,但只有一個(gè)視圖可以開始拖拽。拖拽在多數(shù)情況下是從按下鼠標(biāo)或是移動(dòng)鼠標(biāo)開始的,因此,在 mousePressEvent()或mouseMoveEvent()中,你可以從事件中得到那個(gè)原始的widget指針,例如:
            void CustomItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
            {
             QMimeData *data=new QMimeData;
             data->setColor(Qt::green);
            QDrag *drag=new QDrag(event->widget());
            drag->setMimeData(data);
            drag->start();
            }
            為了在場(chǎng)景中載取拖拽事件,你應(yīng)重新實(shí)現(xiàn)QGraphicsScene::dragEnterEvent()和在QGraphicsItem的子類里任何與你特定場(chǎng)景需要的事件處理器。items也可以通過調(diào)用QGraphicsItem::setAcceptDrops()獲得拖拽支持,為了處理將要進(jìn)行的拖拽,你需要重新實(shí)現(xiàn)QGraphicsItem::dragEnterEvent(),QGraphicsItem::dragMoveEvent(),QGraphicsItem::dragLeaveEvent()和QGraphicsItem::dropEvent()。
            光標(biāo)與工具提示
            像QWidget一樣,QGraphicsItem也支持光標(biāo)(QgraphicsItem::setCursor)與工具提示(QGraphicsItem::setToolTip())。當(dāng)光標(biāo)進(jìn)入到item的區(qū)域,光標(biāo)與工具提示被QGraphicsView激活(通過調(diào)用QGraphicsItem::contains()檢測(cè))。你也可以直接在視圖上設(shè)置一個(gè)缺省光標(biāo)(QGraphicsView::setCursor)。
            動(dòng)畫
            Graphics View支持幾種級(jí)別的動(dòng)畫。你可以很容易地通過把QGraphicsItemAnimatoin與你的item聯(lián)結(jié)來
            裝配出動(dòng)畫路徑,這允許以時(shí)間線來控制動(dòng)畫,在所有平臺(tái)上以穩(wěn)定的速率運(yùn)作。QGraphicsItemAnimation允許你為item的位置,旋轉(zhuǎn),縮放,剪切,變換等產(chǎn)生一條路徑,動(dòng)畫可以用QSlider來控制,或更為普遍使用的QTimeLine。
            另一種是從QObject和QGraphicsItem繼承,item可以設(shè)置自己的定時(shí)器,以在QObject::timeEvent()中增加步進(jìn)的方式來控制動(dòng)畫。
            第三種,是通過調(diào)用QGraphicsScene::advance()來推進(jìn)場(chǎng)景,它又依次調(diào)用QGraphicsItem::advance().
            OpenGL渲染
            為了使用OpenGL渲染,你要設(shè)置一個(gè)新的QGLWidget作為QGraphicsView的視口:QGraphicsView::setViewPort()。假如你讓OpenGL提供反鋸齒功能,你需要OpenGL采樣緩沖支持。
            QGraphicsView view(&scene);
            view.setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
            Item組
            通過把一個(gè)item做為另一個(gè)item的孩子,你可以得到item組的大多數(shù)本質(zhì)特性:這些items會(huì)一起移動(dòng),所有變換
            會(huì)從父到子傳遞。QGraphicsItem也可以為它的孩子處理所有的事件,這樣就允許以父親代表它所有的孩子,可以有效地把所有的items看作一個(gè)整體。
            另外,QGraphicsItemGroup是一個(gè)特殊的item,它既對(duì)孩子事件進(jìn)行處理又有一個(gè)接口把items從一個(gè)組中增加和刪除。把一個(gè)item加到
            QGraphicsItemGroup仍會(huì)保留item的原始位置與變換,而給一個(gè)item重新指定父item則會(huì)讓item根據(jù)其新的父親重新定位??梢杂肣GraphicsScene::createItemGroup()建組。
            posted on 2007-09-27 00:09 清源游民 閱讀(7392) 評(píng)論(5)  編輯 收藏 引用 所屬分類: Qt

            FeedBack:
            # re: QT的Graphics View柜架(3/3)
            2007-09-27 18:42 | SmartPtr
            敢問閣下用的集成開發(fā)環(huán)境是哪個(gè)? 剛接觸linux開發(fā), 不知道哪個(gè)用起來爽一點(diǎn):)  回復(fù)  更多評(píng)論
              
            # re: QT的Graphics View柜架(3/3)
            2007-09-27 19:08 | 清源游民
            Windows下的vs2003, QT可以很好的集成。linux下不清楚。  回復(fù)  更多評(píng)論
              
            # re:尋找你加入
            2007-09-27 20:35 | 愛子
            QQ群名稱:游戲編程學(xué)習(xí)和開發(fā)M
            QQ群號(hào)碼:43047318
            創(chuàng)建人QQ號(hào)碼:光愛之子(273612158)
            QQ群描述:群里是可以提供游戲和有關(guān)游戲編程知識(shí)。同時(shí)還有數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)。 和一些懂得操作系統(tǒng)原理的人 希望你加入。 謝謝!還有游戲策劃,運(yùn)營(yíng)有關(guān)方面知識(shí)。   回復(fù)  更多評(píng)論
              
            # re: QT的Graphics View柜架(3/3) [未登錄]
            2007-11-01 15:03 | bb
            Eclipse Qt Integration 1.0 ,run on windows and linux  回復(fù)  更多評(píng)論
              
            # re: QT的Graphics View柜架(3/3)
            2008-10-20 11:07 | 61003781
            Windows下的vs2003.net 與QT3.x能夠通過QT3.x的QMsNetSetup.msi能夠很好地結(jié)合。請(qǐng)問您用的是QT4嗎,是通過誰的QMsNetSetup.msi與vs2003.net 結(jié)合的呢?  回復(fù)  更多評(píng)論
              
            <2007年3月>
            25262728123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            留言簿(35)

            隨筆分類(78)

            隨筆檔案(74)

            文章檔案(5)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            国产日产久久高清欧美一区| 久久久久久久综合狠狠综合| 亚洲国产精品无码久久SM| 亚洲成av人片不卡无码久久| 亚洲欧美另类日本久久国产真实乱对白| 久久精品嫩草影院| 久久久久无码精品国产app| 久久综合狠狠综合久久97色| 人人妻久久人人澡人人爽人人精品| 亚洲国产精品无码久久久蜜芽| 久久青草国产手机看片福利盒子| 国产无套内射久久久国产| 亚洲一本综合久久| 久久精品国产亚洲AV不卡| 久久天天躁狠狠躁夜夜2020老熟妇 | 无码任你躁久久久久久| 亚洲中文久久精品无码ww16| 久久久久人妻精品一区二区三区| 国产精品内射久久久久欢欢| 国产A级毛片久久久精品毛片| 久久中文字幕一区二区| 精品伊人久久大线蕉色首页| 久久久久国产日韩精品网站| 国内精品久久久久久99| 蜜桃麻豆WWW久久囤产精品| 久久九九亚洲精品| 久久综合亚洲鲁鲁五月天| 久久精品无码一区二区日韩AV| 久久精品国产99久久久| 亚洲色大成网站WWW久久九九| 精品水蜜桃久久久久久久| 国产V综合V亚洲欧美久久| 伊人久久大香线焦AV综合影院| 欧美久久一区二区三区| 久久播电影网| 91精品国产91久久久久久青草| 久久精品国产亚洲av水果派| 亚洲香蕉网久久综合影视| 精品国产乱码久久久久软件| 日本WV一本一道久久香蕉| 日本精品久久久久影院日本|