0

にいくつかQGraphicItemsありQGraphicsSceneます。QGraphicsView含まれているシーンのサイズが変更されたときに、それらの一部のみを変更したいと考えています。その理由は、ビューにそれぞれグリッドを描画したためです。

では、グリッドを構成するアイテムをどのように識別できQGraphivcsView::resizeEvent()ますか?

特定の領域 (sceneRect) が常にビュー全体を占めるようにシーンを調整することは可能でしょうか?

4

1 に答える 1

1

では、QGraphvcsView::resizeEvent() でグリッドを構成するアイテムを特定するにはどうすればよいでしょうか?

1 つの方法は、単純に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 に答える