如何在QGraphicsScene中识别某些QGraphicItems

时间:2012-06-22 08:41:16

标签: qt qgraphicsview qgraphicsscene

我在QGraphicItems中有几个QGraphicsScene。 当包含场景的QGraphicsView调整大小时,我想只修改其中的一些。 原因是我画了一个与视图相对应的网格。

那么如何在QGraphivcsView::resizeEvent()

中识别构成网格的项目

是否可以以给定区域(sceneRect)始终填充整个视图的方式调整场景?

1 个答案:

答案 0 :(得分: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
  }
}
  

是否可以以给定区域的方式调整场景   (sceneRect)总是填满整个视图吗?

QGraphicsView::fitInView()应该做的伎俩

另外,虽然我不完全确定你想要完成什么,但听起来你可能想看看QGraphicsItem::ItemIgnoresTransformations旗帜。

myItem->setFlag( QGraphicsItem::ItemIgnoresTransformations )

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