QGrapicsItem類

這個類翻譯了好久,實在是成員函數太多了,分享出來,希望對大家有用,多多支持哦~~

詳細介紹

QGraphicsItem類是視圖框架的一部分,是在一個QGraphicsScene中最基本的圖形類,它爲繪製你

自己的item提供了一個輕量級的窗口,包括聲明item的位置,碰撞檢測,繪製重載和item之間的相

互作用通過事件處理

Qt提供了一系列標準的items對一些常見的圖像,非常的方便,有下面這些:

QGraphicsEllipseItem  提供一個橢圓item

QGraphicsLineItem     提供一條線的item

QGraphicsPathItem     提供一個任意的路徑item

QGraphicsPixmapItem   提供一個圖形item

QGraphicsPolygonItem  提供一個多邊形item

QGraphicsRectItem     提供一個矩形item

QGraphicsSimpleTextItem 提供一個簡單的文本item

QGraphicsTextItem     提供一個文本瀏覽item

item的所有幾何位置信息都建立在本地座標系統上,item的位置,使用pos()獲得,是唯一一個不再本地item中實現的。它返回的是item在父親座標系統中的位置,關於座標系統可以詳細參看 The Graphics View Coordinate System

通過調用哪個setVisible(),可以設置item是否可見,隱藏一個item同時也隱藏了他的孩子,相似的,你可以通過調用setEnabled()來是指item是否可用。如果禁用了item,那麼它所有的孩子都不可用。默認的,items都是可見和可用的。來開關一個item是否被選擇,首先通過設置itemsSelectable flag來使能選擇。然後調用setSelect(),通常,是否可被選擇的開關時打開的

寫自己的item圖形,首先應該繼承QGraphicsItem,然後重寫他的兩個純虛公共函數,

boundingRect()和paint(),第一個函數返回繪製item大概的區域,第二個函數用來繪製item內容

boundingRect()函數有很多用處,場景在boundingRect()來建立它的item的index,視圖view使用它來剪切可見的item,在重新繪製item時候,來決定相互重疊的部分,此外,item的碰撞檢測機制也使用的boundingRect()來提供一個高效的定點,在collidesWithItem()更好的碰撞算法建立在調用函數shape(),shape()函數以QpainterPath類型返回item的精準的輪廓。

一般的,場景不希望item的boundingRect()和shape()變化,除非該item被通告,如果想通過一些方法改變item的形狀,首先應該調用QgraphicsScene()來允許場景QgraphicsScene來刷新它的item記錄。

碰撞檢測可以通過下面兩種方法來完成

1、重寫shape()函數來返回item的精準輪廓,依靠默認的collidesWithItem()來做外形交集。如果item輪廓和複雜時候,這個消耗是很大的

2、重寫collidesWithItem(),提供一個自己的item和輪廓碰撞的算法

Contains()函數可以調用,用來決定一個item是否包含一個點。這個函數也可以重寫,contains()函數默認的方法是通過調用shape()來完成的。

Items中也可以包含其他的items,也可以被別的items包含,所有的items可以有一個父親item和一串孩子items,除非一個item沒有父親,否則它的位置是在父親座標中,父親items遺傳他的位置和轉換給孩子item

轉換

QgraphicsItem支持投射轉換,有很多方法來改變item的轉換,對於簡單的轉換,可以調用函數setRotation()或者setScale(),可以傳遞一個轉換矩陣給函數setTransform(),對於一些更復雜的轉換,可以通過調用函數setTransformations()來設置一系列組合的轉換。

Item轉換從父親到孩子進行聚集,因此如果一個父親和孩子item都旋轉90度,那麼孩子就旋轉了180度,相似的,如果父親item放大了2X倍,那麼孩子item就被方法4X倍,一個item的轉換不影響他的外觀,所有和外觀有關的函數(例如contains(),update()和所有的映射mapping函數)將會在本地座標中操作,更方便的,QgraphicsItem提供函數sceneTransform(),將會返回item所有的轉換矩陣,scenePos()將會返回item在場景座標中的位置,重新設置item的矩陣,調用函數resetTransform()

一般的轉換回產生一個不同的結果,這取決於轉換應用的順序,例如,如果你放大一個轉換,然後再旋轉它,可能和你先旋轉它得到的結果不一樣,你設置轉換屬性的順序並不影響轉換的結果,(也就是仍舊會按照你的轉換命令去轉換,只是最後得到的圖形不一樣而已),QgraphicsItem經常應用一個合適的順序如下:

繪圖painting

paint()函數被QgrapicsView類調用來繪製item的內容,item默認是沒有背景或者填充顏色的。在函數中沒有被繪製的所有區域都將會發亮,可以調用update()來重繪item,可以選擇傳遞需要重繪的矩形區域(不是必須的)。取決於item在view中是否可見,item可能會也可能不會重繪,QgraphicsItem裏面沒有和Qwidget::repaint()函數等價的

item通過view來繪製,從父items開始,然後是自items,以上升的棧的順序,可以通過調用setZValue()設置item的棧順序,通過zValue()來測試,具有低z-values的item比具有高z-value的item先繪製,棧順序應用於兄弟items,父items總是比子items更早繪製。

排序sort

所有的items都按照一個已經聲明的,穩定的順序來繪製,這個順序也決定了當你在場景中點擊鼠標時候,哪個items最先接受鼠標的輸入。一般的,你不需要擔心排序問題,因爲所有的items都按照一個在場景中聲明的自然的順序

在一個棧中,子item在父item的上面,兄弟item按照插入場景的順序來入棧,如果你先添加了item A ,然後是item B,然後是item C ,這樣棧中的順序從下往上就是A,B,C

Drag and Drop Robot例子中展示了該robot的棧順序,軀幹順序是根item(其他所有的item都是軀幹item的子item或者後代item),然後是頭item被繪製,由於它是軀幹item的子item列表中的第一個item,然後是左臂膀上面的那部分item,下面那個臂膀item是上面臂膀item的子item,所以會在和3號item同等級的兄弟item繪製完後被繪製,接着就是右邊上面的的臂膀item,就是5號item。

。可以調用setZvalue()來設置一個item的相對亦另一個向上,向下或者兄弟棧順序。默認的Z值是0,具有同樣的Z值的item會按照插入的順序來入棧。

。可以調用stackBefore()來備份孩子item的列表,這可以直接更正item的順序。

。如果想讓孩子item在父item的後面,也就是先繪製孩子item,然後在繪製父item,怎麼辦呢?可以設置ItemStacksBehindParent屬性給這個item,利用函數setFlag();

兩個兄弟item的順序也決定了他們的子item 和後代item的順序,如果一個父item的在兩個父item的後面,那麼他所有的孩子items都在另一個父item的孩子items後面。

事件Event

QgraphicsItem從場景中通過sceneEvent()函數來接受事件,這個函數通過一些方便的操作分散大部分事件

ContextMenuEvent()函數接受上下文菜單事件

FocusInEvent()和focusOutEvent()函數接受焦點進出事件

hoverEnterEvent(), hoverMoveEvent(), and hoverLeaveEvent() 接受鼠標懸浮 移動和離開事件

inputMethodEvent()函數處理輸入法事件,

keyPressEvent() and keyReleaseEvent()事件處理鍵盤按下和鬆開事件

mousePressEvent(), mouseMoveEvent(), mouseReleaseEvent(), and mouseDoubleClickEvent()處理鼠標按下,移動,鬆開,雙擊事件

也可以爲一些item過濾一些事件通過安裝過濾器,這個和QT一般的事件過濾器不一樣,一般的過濾器只工作在Qobject和它的子類,通過調用installSceneEventFilter()爲item安裝了過濾器後,被過濾的事件將會被虛函數sceneEventFilter().捕捉到,可以通過調用函數removeSceneEventFilter().來去除掉事件過濾器

Custom Data數據

有些時候爲item註冊一些數值很有用,做一個普通的item或者標準的item,可以調用setData()來爲任一個item設置值,這個值使用key-value對,(key是整形,value是變種數據Qvarient)來得到item的數據,通過調用data(),

1、QVariant QGraphicsItem::itemChange ( GraphicsItemChange change, const QVariant & value )   [virtual protected]

這個函數被QGraphicsItem調用用來標明items的一些狀態改變了,通過重載這個函數,可以對自己定義事件響應,在一些情況下,可以做一些調整。

參數change是改變的那個item的改變狀態參數,value是一個新的數據,他的類型取決於change,

change是QGraphicsItem::GraphicsItemChange的枚舉變量

enum      GraphicsItemChange { ItemEnabledChange, ItemEnabledHasChanged,

ItemMatrixChange, ItemPositionChange, ..., ItemScenePositionHasChanged }

例如:

QVariant Component::itemChange(GraphicsItemChange change, const QVariant &value)

{

     if (change == ItemPositionChange && scene()) {

         // value is the new position.

         QPointF newPos = value.toPointF();

         QRectF rect = scene()->sceneRect();

         if (!rect.contains(newPos)) {

             // Keep the item inside the scene rect.

             newPos.setX(qMin(rect.right(), qMax(newPos.x(), rect.left())));

             newPos.setY(qMin(rect.bottom(), qMax(newPos.y(), rect.top())));

             return newPos;

         }

     }

     return QGraphicsItem::itemChange(change, value);

}

默認的函數什麼都不做,只返回value

注意:在使用這個函數時候,在函數內部調用函數時候要小心,因爲這可能導致一些意想不到的結果,例如:你不能再這個函數裏面調用setPos()在change是ItemPositionChange時候,由於setPos()函數將會再次調用itemChange(ItemPositionChange),如此就一直循環下去了。

2、void QGraphicsItem::setFlag ( GraphicsItemFlag flag, bool enabled = true )

void QGraphicsItem::setFlags ( GraphicsItemFlags flags )

把flags設置爲item的屬性,如果item獲得了光標,但是flags沒有使能ItemsFocusable,這個item

將會丟失光標,同樣的,當item被選擇到,但是沒有使能ItemsSelectable,這個item會自動的失去

選擇。

默認的,所有的flags都是不可用的。(QGraphicsWidget 爲了獲得位置變化默認使能了

ItemSendsGeometryChanges)

相近的函數

GraphicsItemFlags QGraphicsItem::flags () const

返回item的所有使能的flags,例如,如果flags裏面包含了ItemIsFocusable,這個item可以接受

輸入光標

3、QPainterPath QGraphicsItem::shape () const   [virtual]

以QPainterPath返回item在local座標中的形狀,這個形狀可以用來做很多事情,包括碰撞偵測,

打擊測試,還有用來 QGraphicsScene::items() 函數

默認的函數調用boundingRect()返回一個簡單的矩形形狀,但是子類可以重載這個函數,爲非矩形

的item返回一個更加精準的形狀,例如一個圓形的item可以選擇返回一個橢圓形,用來獲得更好的

碰撞偵測效果。代碼:

QPainterPath RoundItem::shape() const

{

     QPainterPath path;

     path.addEllipse(boundingRect());

     return path;

}

形狀的輪廓線可以通過繪製時候的pen來變化

4、QRectF QGraphicsItem::boundingRect () const   [pure virtual]

這個純虛函數用矩形聲明瞭item的邊界輪廓,所有的繪製都必須限定在item的矩形邊框內。

QGraphicsView使用這個方法來決定item是否需要重繪

儘管item的形狀可以是任意的,但是邊框一直都是矩形,不影響items的變換

如果想改變items的邊框,應該首先調用prepareGeometryChange(),這將通知場景scene即將發生的變化,這樣場景可以刷新item的位置下標。否則,場景將不會察覺到item的變化,結果也未知。

如果要重繪item時候,重載這個函數來讓QGraphicsView來決定item的邊界區域,

注意:由於繪製邊界時候的邊界輪廓線,在這個矩形區域內包含畫筆pen寬度的一半很重要,不需

要補償畫圖走樣  例如

QRectF CircleItem::boundingRect() const

{

     qreal penWidth = 1;

     return QRectF(-radius - penWidth / 2, -radius - penWidth / 2,

                   diameter + penWidth, diameter + penWidth);

}

同樣的一個返回item輪廓的函數

QRegion QGraphicsItem::boundingRegion ( const QTransform & itemToDeviceTransform ) const

返回該item的輪廓區域,返回的區域的座標系統依賴於參數itemToDeviceTransform,如果你傳遞一個Qtransform對象作爲參數,那麼函數將返回本地座標系統區域

返回的區域是item內容可見的一個大概的輪廓,儘管計算起來很浪費空間和時間,但是比boundingRect()更精準,而且當重繪時候,它還能避免不必要的重繪。對像線或者簡單的多邊形來說非常有效。

也可以調節輪廓區域的粒度通過調用setBoundingRegionGranularity(),默認的粒度是0,這時候item的區域和輪廓矩形一樣的。

itemToDeviceTransform是從item座標系統到設備座標系統的一個轉換。如果你想讓這個函數返回一個場景座標區域,可以用函數sceneTransform()作爲參數。

相關函數qreal QGraphicsItem::boundingRegionGranularity () const

返回item的輪廓區域粒度

5、void QGraphicsItem::setPos ( const QPointF & pos )

在父對象座標系統中設置item的位置爲pos,對沒有父對象的items,pos使用的場景的座標系統,

6、QPointF QGraphicsItem::scenePos () const

返回該item在場景中的座標點,等價於調用函數mapToScene(0, 0).

7、QPointF QGraphicsItem::pos () const

返回item在父座標系中的位置,如果沒有父座標系,那麼返回在場景座標系中的位置,此時等價於調用scenePos (),可以直接調用scenePos ()來獲取該item在場景中的位置,從而忽略其父對象。

8、enum QGraphicsItem::CacheMode
設置繪圖的緩衝模式,默認是沒有緩衝,如果使用緩衝區的話,在重繪時候,非常快

設置緩衝模式使用函數QGraphicsItem::setCacheMode().

9、bool QGraphicsItem::acceptDrops () const

如果item能夠接受拖拽事件,就返回真,否則返回假,默認的不能接受拖拽事件

同類函數

void QGraphicsItem::setAcceptDrops ( bool on )

如果On是真的話,就設置item可以接受拖拽事件,否則對拖拽事件是透明的,也就是不能響應拖拽,默認是不響應的。

10、bool QGraphicsItem::acceptHoverEvents () const

如果可以接受鼠標懸浮在他上面的事件,就返回真,否則返回假。默認也是不接受該事件的。

同樣的用於設置是否接受該事件的函數

void QGraphicsItem::setAcceptHoverEvents ( bool enabled )

如果enabled爲真,就接受,否則就不接受。

11、Qt::MouseButtons QGraphicsItem::acceptedMouseButtons () const

返回這個item所能接受的鼠標事件的鼠標鍵,默認的是所有的鼠標鍵事件都能接受。

同樣的使用函數void QGraphicsItem:: setAcceptedMouseButtons ( Qt::MouseButtons buttons )來設置接受的鼠標鍵事件,如果想忽略某個鼠標鍵事件,可以用setAcceptedMouseButtons(0)

12、void QGraphicsItem::advance ( int phase )   [virtual]

這個虛函數被QGraphicsScene::advance()調用兩次,第一次調用,所有的items都調用,使用參數phase=0,表示場景中所有的items都將advance(前進),然後所有的items都將調用,使用參數phase=1,重寫這個函數,可以來刷新你的item,如果你需要簡單的場景控制動畫。

默認的該函數什麼事都不做

如果想寫動畫,可以使用兩種方法,一個使用QGraphicsItemAnimation,,或多重繼承Qobject和QgraphicsItem,然後使用QObject::startTimer() 和 QObject::timerEvent().來使item成動畫。

13、QList<QGraphicsItem *> QGraphicsItem::childItems () const

返回孩子item的一個鏈表,這些items按照棧順序排列,考慮了item的插入順序和Z-values

14、QRectF QGraphicsItem::childrenBoundingRect () const

返回這個item的所有子孫items的本地座標系統輪廓矩形。這個矩形包括了這個item所有的子孫item,如果這個item不含有子孫item,這個函數將返回一個空的矩形。

返回的矩形不包括item本身的輪廓矩形,只返回子孫item的矩形輪廓,如果你想包含item本身的矩形區域,可以使用QRectF::operator|()把boundingRect()和hildrenBoundingRect()或起來。

這個函數很複雜,它決定了返回輪廓的大小通過重複所有子孫item

15、void QGraphicsItem::clearFocus ()

去除item的光標,如果原來有光標焦點,當焦點失去時候,事件focus out event會發送給這個item,提示他將會失去焦點。

Item只有設置了ItemsFocusable屬性,或者widget設置了合適的焦點策略,才能接受鍵盤焦點。

16、bool QGraphicsItem::collidesWithItem ( const QGraphicsItem * other, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape ) const   [virtual]

如果這個item和另一個item碰撞就返回真,mode是應用於其他item的,默認是Qt::IntersectsItemShape,如果其他的item和這個item相互影響或者包含,被包含於這個item的形狀(詳見Qt::ItemSelectionMode)。

默認的函數是就基於外形相互影響,它調用兩個item的shape()函數,這將會花費很大時間,你可以在QgraphicsItem子類中重寫這個函數,提供一個簡單的算法。這樣你可以使用自己item的一些參數,這樣可以提高碰撞偵測的效果。例如,兩個完全沒有轉換的圓item的碰撞可以通過對比他們的圓心位置和半徑

17、bool QGraphicsItem::collidesWithPath ( const QPainterPath & path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape ) const   [virtual]

如果item按照path碰撞就返回真,

18、QList<QGraphicsItem *> QGraphicsItem::collidingItems ( Qt::ItemSelectionMode mode = Qt::IntersectsItemShape ) const

返回和這個item相互碰撞的item的鏈表

碰撞偵測模式取決於mode,

19/ QGraphicsItem * QGraphicsItem::commonAncestorItem ( const QGraphicsItem * other ) const

返回item最近的祖先item,如果other爲0,或者沒有祖先item,就返回0

20、bool QGraphicsItem::contains ( const QPointF & point ) const   [virtual]

如果item包含了點point就返回TRUE,否則返回FALSE,最常用的是在QgraphicsView中調用,來判斷這個item是否在光標下面,如果要重寫這個函數,那就儘可能的簡單。默認的這個函數調用的shape()函數

21、void QGraphicsItem::contextMenuEvent ( QGraphicsSceneContextMenuEvent * event )   [virtual protected]

右鍵菜單事件,可以在子類中重寫這個函數,event裏面包含了事件要具體處理的數據。

如果忽略這個事件,調用函數QEvent::ignore(),事件event將會被傳播到任何在該item之下的items,如果沒有item響應這個事件,那麼場景就忽略這個事件,傳遞給view視圖

通常是響應該事件打開一個右鍵菜單,例如

void CustomItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
 {
     QMenu menu;
     QAction *removeAction = menu.addAction("Remove");
     QAction *markAction = menu.addAction("Mark");
     QAction *selectedAction = menu.exec(event->screenPos());
     // ...
 }

默認是忽略該事件。

22、QVariant QGraphicsItem::data ( int key ) const

以Qvariant的格式返回item中的數據,當前的item數據對存儲任意數據很有用,例如

static const int ObjectName = 0;
 QGraphicsItem *item = scene.itemAt(100, 50);
 if (item->data(ObjectName).toString().isEmpty()) {
     if (qgraphicsitem_cast<ButtonItem *>(item))
         item->setData(ObjectName, "Button");
 }

void QGraphicsItem::setData ( int key, const QVariant & value )

用來設置item的數據

23、QTransform QGraphicsItem::deviceTransform ( const QTransform & viewportTransform ) const

返回item設備的轉換矩陣,使用viewportTransform來從場景到設備影射座標,這個矩陣可以用來從這個item本地座標到視圖口座標系統映射座標或者幾何圖形,如果要映射視圖口座標到本地座標,首先應該轉換返回的這個矩陣。

QGraphicsRectItem rect;
 rect.setPos(100, 100);
 rect.deviceTransform(view->viewportTransform()).map(QPointF(0, 0));
 // returns the item's (0, 0) point in view's viewport coordinates
 rect.deviceTransform(view->viewportTransform()).inverted().map(QPointF(100, 100));
 // returns view's viewport's (100, 100) coordinate in item coordinates

這個函數是結合了到場景的轉換和到視圖的轉換,設備轉換可以用來對那些沒有進行轉換座標的item計算碰撞。

24、拖拽類函數

void QGraphicsItem::dragEnterEvent ( QGraphicsSceneDragDropEvent * event )   [virtual protected]

void QGraphicsItem::dragLeaveEvent ( QGraphicsSceneDragDropEvent * event )   [virtual protected]

void QGraphicsItem::dragMoveEvent ( QGraphicsSceneDragDropEvent * event )   [virtual protected]

void QGraphicsItem::dropEvent ( QGraphicsSceneDragDropEvent * event )   [virtual protected]

25、qreal QGraphicsItem::effectiveOpacity () const

返回item的有效透明度,這個數值在0.0~~1.0之間

同樣的可以用函數void QGraphicsItem::setOpacity ( qreal opacity )來設置透明度,

默認的子item繼承父item的透明度

同樣可以設置item的屬性QGraphicsItem::ItemIgnoresParentOpacity 來忽略父item的透明度對自己的影響

設置子item的屬性QGraphicsItem::ItemIgnoresTransformations來忽略視圖轉換(放大,縮小)等操作對自己的影響,在顯示文本時候很有用。

26、void QGraphicsItem::hoverEnterEvent ( QGraphicsSceneHoverEvent * event )   [virtual protected]

void QGraphicsItem::hoverLeaveEvent ( QGraphicsSceneHoverEvent * event )   [virtual protected]

void QGraphicsItem::hoverMoveEvent ( QGraphicsSceneHoverEvent * event )   [virtual protected]

鼠標懸浮事件

27、void QGraphicsItem::mouseDoubleClickEvent ( QGraphicsSceneMouseEvent * event )   [virtual protected]

void QGraphicsItem::mouseMoveEvent ( QGraphicsSceneMouseEvent * event )   [virtual protected]

void QGraphicsItem::mousePressEvent ( QGraphicsSceneMouseEvent * event )   [virtual protected]

void QGraphicsItem::mouseReleaseEvent ( QGraphicsSceneMouseEvent * event )   [virtual protected]

鼠標雙擊,移動,釋放的事件

28、QPointF QGraphicsItem::mapFromItem ( const QGraphicsItem * item, const QPointF & point ) const

QPolygonF QGraphicsItem::mapFromItem ( const QGraphicsItem * item, const QRectF & rect ) const

QPainterPath QGraphicsItem::mapFromItem ( const QGraphicsItem * item, const QPainterPath & path ) const

QPolygonF QGraphicsItem::mapFromItem ( const QGraphicsItem * item, qreal x, qreal y, qreal w, qreal h ) const

QPointF QGraphicsItem::mapFromItem ( const QGraphicsItem * item, qreal x, qreal y ) const

QPointF QGraphicsItem::mapFromParent ( const QPointF & point ) const

QPolygonF QGraphicsItem::mapFromParent ( const QRectF & rect ) const

QPolygonF QGraphicsItem::mapFromParent ( const QPolygonF & polygon ) const

QPainterPath QGraphicsItem::mapFromParent ( const QPainterPath & path ) const

QPolygonF QGraphicsItem::mapFromParent ( qreal x, qreal y, qreal w, qreal h ) const

QPointF QGraphicsItem::mapFromParent ( qreal x, qreal y ) const

QPointF QGraphicsItem::mapFromScene ( const QPointF & point ) const

QPolygonF QGraphicsItem::mapFromScene ( const QRectF & rect ) const

QPolygonF QGraphicsItem::mapFromScene ( const QPolygonF & polygon ) const

QPainterPath QGraphicsItem::mapFromScene ( const QPainterPath & path ) const

QPolygonF QGraphicsItem::mapFromScene ( qreal x, qreal y, qreal w, qreal h ) const

QPointF QGraphicsItem::mapFromScene ( qreal x, qreal y ) const

QRectF QGraphicsItem::mapRectFromItem ( const QGraphicsItem * item, const QRectF & rect ) const

QRectF QGraphicsItem::mapRectFromItem ( const QGraphicsItem * item, qreal x, qreal y, qreal w, qreal h ) const

。。。。。。。。。。太多了

轉換矩陣函數

29、void QGraphicsItem::moveBy ( qreal dx, qreal dy )

向x,y方向上移動dx,dy的距離,等價於調用setPos(pos()+QpointF(dx,dy))

30/最重要的一個函數

void QGraphicsItem::paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0 )   [pure virtual]

這個函數通常被view調用,然後再本地座標系統中繪製item的內容

31、qreal QGraphicsItem::rotation () const

返回item的旋轉度,

設置旋轉度函數使用setRotation(),

32、qreal QGraphicsItem::scale () const

返回縮放係數

設置縮放使用setScale()

33、bool QGraphicsItem::sceneEvent ( QEvent * event )   [virtual protected]

截獲事件,在事件沒有分發給各個具體的事件處理函數之前。

相當於bool QObject::event ( QEvent * e )   [virtual]

34、void QGraphicsItem::scroll ( qreal dx, qreal dy, const QRectF & rect = QRectF() )

滾動item

35、在使item能響應一些事件之前,需要先使能這個功能,例如

void QGraphicsItem::setAcceptDrops ( bool on ) 

如果on爲真,那麼就使能拖拽,否則將會忽略拖拽事件。默認是不接受的

void QGraphicsItem::setAcceptHoverEvents ( bool enabled )

如果on爲真,使能鼠標懸浮事件。默認不接受該事件。

void QGraphicsItem::setAcceptTouchEvents ( bool enabled )

在一些支持觸摸的設備上,這個函數將使能觸摸事件。

36、void QGraphicsItem::setEnabled ( bool enabled )

使該item有效,如果enabled爲假,則該item不能用了

37、void QGraphicsItem::setGraphicsEffect ( QGraphicsEffect * effect )、

設置item的效果,可以用模糊效果,印象效果,給定顏色繪製效果,透明效果等

詳細的可以參見QgraphicsEffect類

38、const int QGraphicsItem::Type

返回該item的類型值,這個值是自己通過定義Type的值,然後使用type()虛函數來返回的,看例子

class QGraphicsPathItem : public QAbstractGraphicsShapeItem
 {
  public:
   enum { Type = 2 };
     int type() const { return Type; }
   ...
 };

39、T qgraphicsitem_cast ( QGraphicsItem * item )

如果item是T類型的,把item轉換成T類型的item,如果失敗,則返回0

如果想讓他正確的工作,需要重新實現函數type()來進行判斷

會陸陸續續把QGraphicsView  QGraphicsScene等於視圖框架有關的類的翻譯拿出來

=======================================================================================================================

轉載自:http://blog.csdn.net/xie376450483/article/details/5996482

發佈了1 篇原創文章 · 獲贊 31 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章