我在QGraphicsScene
中有幾個QGraphicItems
。 當包含場景的QGraphicsView
被調整大小時,我只想修改其中的一部分。 原因是我畫了一個網格相應的視圖。如何識別QGraphicsScene中的某些QGraphicItems
那麼如何確定QGraphivcsView::resizeEvent()
中組成網格的物品?
是否可以通過給定區域(sceneRect)始終填充完整視圖的方式來調整場景?
我在QGraphicsScene
中有幾個QGraphicItems
。 當包含場景的QGraphicsView
被調整大小時,我只想修改其中的一部分。 原因是我畫了一個網格相應的視圖。如何識別QGraphicsScene中的某些QGraphicItems
那麼如何確定QGraphivcsView::resizeEvent()
中組成網格的物品?
是否可以通過給定區域(sceneRect)始終填充完整視圖的方式來調整場景?
那麼如何確定組成QGraphivcsView :: resizeEvent()中的網格的項目?
的一種方法是簡單地使用dynamic_cast
和QGrahpicsScene::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)
這使得任何具有給定標誌的項目都不會受到縮放級別更改的影響。
對於你的最後一個問題,如果你知道新尺寸和舊尺寸似乎可能與:QResizeEvent :: oldSize()' 其餘的我可以使用'QGraphicsView :: scale'不太明白,你不能使用* QGraphicsItem嗎? – Leo