0

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

那么如何识别构成网格的项目QGraphivcsView::resizeEvent()呢?

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

4

1 回答 1

1

那么如何在 QGraphivcsView::resizeEvent() 中识别构成网格的项目?

一种方法是简单地使用dynamic_castand 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
  }
}

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

QGraphicsView::fitInView()应该可以解决问题

此外,虽然我不完全确定您要完成什么,但在我看来,您可能想查看QGraphicsItem::ItemIgnoresTransformations标志。

myItem->setFlag( QGraphicsItem::ItemIgnoresTransformations )

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

于 2012-06-22T15:16:31.787 回答