我在QGraphicsScene
中有几个QGraphicItems
。 当包含场景的QGraphicsView
被调整大小时,我只想修改其中的一部分。 原因是我画了一个网格相应的视图。如何识别QGraphicsScene中的某些QGraphicItems
那么如何确定QGraphivcsView::resizeEvent()
中组成网格的物品?
是否可以通过给定区域(sceneRect)始终填充完整视图的方式来调整场景?
我在QGraphicsScene
中有几个QGraphicItems
。 当包含场景的QGraphicsView
被调整大小时,我只想修改其中的一部分。 原因是我画了一个网格相应的视图。如何识别QGraphicsScene中的某些QGraphicItems
那么如何确定QGraphivcsView::resizeEvent()
中组成网格的物品?
是否可以通过给定区域(sceneRect)始终填充完整视图的方式来调整场景?
那么如何确定组成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
}
}
是否有可能以某种方式调整场景:给定区域 (sceneRec t)总是填满整个视图?
QGraphicsView::fitInView()应该做的伎俩
此外,虽然我不是很确定你要完成什么,这听起来对我说,你可能要检查出QGraphicsItem::ItemIgnoresTransformations
标志。
myItem->setFlag(QGraphicsItem::ItemIgnoresTransformations)
这使得任何具有给定标志的项目都不会受到缩放级别更改的影响。
对于你的最后一个问题,如果你知道新尺寸和旧尺寸似乎可能与:QResizeEvent :: oldSize()' 其余的我可以使用'QGraphicsView :: scale'不太明白,你不能使用* QGraphicsItem吗? – Leo