2012-06-22 60 views
0

我在QGraphicsScene中有幾個QGraphicItems。 當包含場景的QGraphicsView被調整大小時,我只想修改其中的一部分。 原因是我畫了一個網格相應的視圖。如何識別QGraphicsScene中的某些QGraphicItems

那麼如何確定QGraphivcsView::resizeEvent()中組成網格的物品?

是否可以通過給定區域(sceneRect)始終填充完整視圖的方式來調整場景?

+0

對於你的最後一個問題,如果你知道新尺寸和舊尺寸似乎可能與:QResizeEvent :: oldSize()' 其餘的我可以使用'QGraphicsView :: scale'不太明白,你不能使用* QGraphicsItem嗎? – Leo

回答

1

那麼如何確定組成QGraphivcsView :: resizeEvent()中的網格的項目?

的一種方法是簡單地使用dynamic_castQGrahpicsScene::items()

foreach(QGraphicsItem *item, myScene->items()) 
{ 
    GridItem *gridItem = dynamic_cast<GridItem*>(item); 
    if(gridItem) 
    { 
    // Apply appropriate transformation here 
    } 
} 

一個稍微 「Qt的」 辦法做到上面會,以確保您的QGraphicsItem的子類重新實現QGraphicsItem::type()

foreach(QGraphicsItem *item, myScene->items()) 
{ 
    if(item->type() == GridItem::Type) 
    { 
    // Apply appropriate transformation here 
    } 
} 

是否有可能以某種方式調整場景:給定區域 (sceneRec t)總是填滿整個視圖?

QGraphicsView::fitInView()應該做的伎倆

此外,雖然我不是很確定你要完成什麼,這聽起來對我說,你可能要檢查出QGraphicsItem::ItemIgnoresTransformations標誌。

myItem->setFlag(QGraphicsItem::ItemIgnoresTransformations) 

這使得任何具有給定標誌的項目都不會受到縮放級別更改的影響。

相關問題