我有几个QGraphicItems
在一个QGraphicsScene
。QGraphicsView
当包含的场景被调整大小时,我只想修改其中的一些。原因是我已经绘制了一个与视图相对应的网格。
那么如何识别构成网格的项目QGraphivcsView::resizeEvent()
呢?
是否可以以给定区域(sceneRect)始终填充完整视图的方式调整场景?
我有几个QGraphicItems
在一个QGraphicsScene
。QGraphicsView
当包含的场景被调整大小时,我只想修改其中的一些。原因是我已经绘制了一个与视图相对应的网格。
那么如何识别构成网格的项目QGraphivcsView::resizeEvent()
呢?
是否可以以给定区域(sceneRect)始终填充完整视图的方式调整场景?
那么如何在 QGraphivcsView::resizeEvent() 中识别构成网格的项目?
一种方法是简单地使用dynamic_cast
and 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 )
这使得具有给定标志的任何项目都不会受到缩放级别更改的影响。