我在QGraphicItems
中有几个QGraphicsScene
。
当包含场景的QGraphicsView
调整大小时,我想只修改其中的一些。
原因是我画了一个与视图相对应的网格。
那么如何在QGraphivcsView::resizeEvent()
?
是否可以以给定区域(sceneRect)始终填充整个视图的方式调整场景?
答案 0 :(得分:1)
那么如何在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
}
}
是否可以以给定区域的方式调整场景 (sceneRect)总是填满整个视图吗?
QGraphicsView::fitInView()应该做的伎俩
另外,虽然我不完全确定你想要完成什么,但听起来你可能想看看QGraphicsItem::ItemIgnoresTransformations
旗帜。
myItem->setFlag( QGraphicsItem::ItemIgnoresTransformations )
这使得具有给定标志的任何项目都不会受到缩放级别更改的影响。