2012-06-22 31 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) 

这使得任何具有给定标志的项目都不会受到缩放级别更改的影响。

相关问题