2

我正在尝试在 Qt 中编写地图编辑器,将 QGraphicsView 和 QGraphicsScene 用于地图和瓦片表。

我现在遇到的问题是制作一个用于导入瓷砖的好小部件。为此,我使用 QTabWidget(用于不同的 tile sheet),并使用 TileWidget 作为每个选项卡的小部件,其中包含 QGraphicsScene 和 QGraphicsView。

它在一定程度上工作,但并非所有图块(或 TileObjects,它们是 QGraphicsItem 的实现)都是可见的。我什至打电话view->ensureVisible(scene->sceneRect()),但仍然不是所有的 QGraphicsScene 都是不可见的,即使有滚动条也是如此。

我知道这是由于限制了我的 QTabWidget 的最大大小,但这是必要的。

这主要发生在我导入更大的瓷砖表时。

我有一个TileWidget作为 的QWidgetQTabWidget它同时具有QGraphicsSceneQGraphicsView

TileWidget::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);
}

我得到这样的东西。

在此处输入图像描述

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

没关系,想通了。只是我笨。

4

1 回答 1

3

你需要类似的东西:

p_myGraphicsView->fitInView(
    myGraphicsView->scene()->itemsBoundingRect(),
    Qt::KeepAspectRatio);
于 2012-04-02T12:23:20.730 回答