查看整个QGraphicsScene

时间:2012-04-02 12:11:39

标签: c++ qt qgraphicsview qgraphicsscene

我正在尝试在Qt中编写地图编辑器,使用QGraphicsView和QGraphicsScene来制作地图和瓷砖表。

我现在遇到的问题是为导入磁贴创建一个好的小部件。为此,我使用QTabWidget(用于不同的图块表),并使用TileWidget作为每个选项卡的窗口小部件,其中包含QGraphicsScene和QGraphicsView。

它的工作程度很大,但并非所有的tile(或TileObjects,它们都是QGraphicsItem的实现)都是可见的。我甚至打电话给view->ensureVisible(scene->sceneRect()),但即使使用滚动条,仍然不能看到所有的QGraphicsScene。

我知道这是因为限制了我的QTabWidget的最大尺寸,但这是必要的。

这主要发生在我导入较大的图块表时。

TileWidgetQWidget QTabWidget QGraphicsSceneQGraphicsViewTileWidget::TileWidget(QWidget *parent) : QWidget(parent) { scene = new QGraphicsScene; view = new TileView(scene, this); connect(view, SIGNAL(newBrushSelected(TileObject *b)), this, SLOT(selectNewBrush(TileObject *b))); }

TileView

QGraphicsView只是一个scene->addItem()重新实现来处理鼠标释放事件。

要添加图块,我只需拨打TileView

我没有void TileWidget::showEvent(QShowEvent *event) { view->fitInView(scene->itemsBoundingRect(), Qt::KeepAspectRatio); } 的其他代码。当我使用

{{1}}

我得到这样的东西。

enter image description here

可以使用较小的瓷砖,但不适用于较大的瓷砖。我应该添加什么来保持瓷砖的大小正常,并使用滚动条导航TileView?

没关系,明白了。只是我是傻瓜。

1 个答案:

答案 0 :(得分:3)

您需要以下内容:

p_myGraphicsView->fitInView(
    myGraphicsView->scene()->itemsBoundingRect(),
    Qt::KeepAspectRatio);