我正在尝试在 Qt 中编写地图编辑器,将 QGraphicsView 和 QGraphicsScene 用于地图和瓦片表。
我现在遇到的问题是制作一个用于导入瓷砖的好小部件。为此,我使用 QTabWidget(用于不同的 tile sheet),并使用 TileWidget 作为每个选项卡的小部件,其中包含 QGraphicsScene 和 QGraphicsView。
它在一定程度上工作,但并非所有图块(或 TileObjects,它们是 QGraphicsItem 的实现)都是可见的。我什至打电话view->ensureVisible(scene->sceneRect())
,但仍然不是所有的 QGraphicsScene 都是不可见的,即使有滚动条也是如此。
我知道这是由于限制了我的 QTabWidget 的最大大小,但这是必要的。
这主要发生在我导入更大的瓷砖表时。
我有一个TileWidget
作为 的QWidget
,QTabWidget
它同时具有QGraphicsScene
和QGraphicsView
。
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?
没关系,想通了。只是我笨。