成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解 QT 中Graphics View柜架 (下篇)

移動(dòng)開發(fā)
Graphics View使用BSP樹來(lái)提供對(duì)item的快速查找,使用這種技術(shù),它可以實(shí)時(shí)地繪制大規(guī)模場(chǎng)景,甚至以百萬(wàn)items計(jì)。Graphics View在Qt 4.2中被引用,它替代了它的前輩QCanvas。

QT Graphics View柜架是本文要介紹的內(nèi)容,本文分為三部分為大家介紹,本篇文章為下篇,想要繼續(xù)深入了解的請(qǐng)繼續(xù)關(guān)注。參考末尾。本節(jié)介紹的是詳解 QT Graphics View柜架 (下篇),繼續(xù)上篇 詳解 QT 中Graphics View柜架 (中篇)的內(nèi)容繼續(xù)介紹,先來(lái)看內(nèi)容

關(guān)鍵特性

縮放與旋轉(zhuǎn)

QGraphicsView通過QGraphicsView::setMatrix()支持同QPainter一樣的仿射變換,通過對(duì)一個(gè)視圖應(yīng)用變換,你可以很容易地支持普通的導(dǎo)航特性如縮放與旋轉(zhuǎn)。下面是一個(gè)例子:

  1. void CustomItem::mousePressEvent(QGraphicsSceneMouseEvent *event)  
  2. {  
  3.  QMimeData *data=new QMimeData;  
  4.  data->setColor(Qt::green);  
  5. QDrag *drag=new QDrag(event->widget());  
  6. drag->setMimeData(data);  
  7. drag->start();  

這些槽應(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指針,例如:

  1. void CustomItem::mousePressEvent(QGraphicsSceneMouseEvent *event)  
  2. {  
  3.  QMimeData *data=new QMimeData;  
  4.  data->setColor(Qt::green);  
  5. QDrag *drag=new QDrag(event->widget());  
  6. drag->setMimeData(data);  
  7. 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é)來(lái)

裝配出動(dòng)畫路徑,這允許以時(shí)間線來(lái)控制動(dòng)畫,在所有平臺(tái)上以穩(wěn)定的速率運(yùn)作。QGraphicsItemAnimation允許你為item的位置,旋轉(zhuǎn),縮放,剪切,變換等產(chǎn)生一條路徑,動(dòng)畫可以用QSlider來(lái)控制,或更為普遍使用的QTimeLine。

另一種是從QObject和QGraphicsItem繼承,item可以設(shè)置自己的定時(shí)器,以在QObject::timeEvent()中增加步進(jìn)的方式來(lái)控制動(dòng)畫。

第三種,是通過調(diào)用QGraphicsScene::advance()來(lái)推進(jìn)場(chǎng)景,它又依次調(diào)用QGraphicsItem::advance().

OpenGL渲染

為了使用OpenGL渲染,你要設(shè)置一個(gè)新的QGLWidget作為QGraphicsView的視口:QGraphicsView::setViewPort()。假如你讓OpenGL提供反鋸齒功能,你需要OpenGL采樣緩沖支持。

  1. QGraphicsView view(&scene);  
  2. 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ù)其新的父親重新定位。可以用QGraphicsScene::createItemGroup()建組。

小結(jié):詳解 QTGraphics View柜架 (下篇)的內(nèi)容介紹完了,希望本篇文章對(duì)你有所幫助!更所相關(guān)內(nèi)容請(qǐng)參考編輯推薦。

責(zé)任編輯:zhaolei 來(lái)源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-06-30 10:09:26

QT Graphics View

2011-06-30 10:22:48

QT Graphics View

2011-06-17 10:19:11

Qt QWidge QSetting

2011-06-17 09:58:26

Qt Chapter QObject

2011-07-05 18:40:19

QT 信號(hào) 機(jī)制

2011-06-24 16:50:06

QT 框架 OpenCV

2011-06-23 18:16:59

Qt Qtopia

2011-07-01 14:20:59

Qt 事件

2011-06-14 11:48:38

Webkit QT

2011-06-24 11:12:39

Qt 多線程 線程

2011-06-17 17:16:01

Qt Eclipse Linux

2011-06-17 13:39:47

Qt 文件

2010-05-18 13:53:34

Subversion插

2011-06-27 13:49:43

Qt 數(shù)據(jù)庫(kù) QSqlQueryM

2011-06-30 16:08:05

Qt 字庫(kù) QPF

2011-06-24 09:13:30

QT SDL

2011-06-21 15:58:20

Qt 數(shù)據(jù)庫(kù)

2011-06-27 10:28:45

Qt 網(wǎng)絡(luò) TCP

2011-06-22 16:08:40

Qt 多線程 事件循環(huán)

2011-06-24 14:17:58

Qt 容器類 QVector
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国内精品久久影院 | 欧美一卡二卡在线观看 | 久久久久国产精品免费免费搜索 | 久久久一二三区 | 日韩在线精品强乱中文字幕 | 国产黄色大片在线观看 | 中文字幕不卡在线观看 | 欧美日韩精品一区二区 | 日韩中文在线 | 亚洲成人天堂 | 久久精点视频 | 精品免费国产视频 | 在线观看成人 | 久久久婷婷| 伊人天堂网 | 精品久久久久久久久久久久久久久久久 | 高清av电影 | 久久精品国产一区老色匹 | 青青激情网 | www.激情.com| 国产精品久久国产愉拍 | 精品久久久久久久人人人人传媒 | 在线观看av不卡 | 色婷婷一区二区三区四区 | 日本啊v在线 | 免费亚洲一区二区 | 国内精品视频 | 婷婷毛片 | 中文字幕免费在线 | 日日干天天操 | 91综合在线视频 | 欧美一区在线视频 | 玖玖操 | 国产精品成人一区二区 | 日韩欧美一区二区三区免费观看 | 成人在线视频观看 | 99re国产 | 国产人免费人成免费视频 | 999久久久免费精品国产 | 围产精品久久久久久久 | 久久精品美女 |