我正在尝试在Qt中编写地图编辑器,使用QGraphicsView和QGraphicsScene来制作地图和瓷砖表。
我现在遇到的问题是为导入磁贴创建一个好的小部件。为此,我使用QTabWidget(用于不同的图块表),并使用TileWidget作为每个选项卡的窗口小部件,其中包含QGraphicsScene和QGraphicsView。
它的工作程度很大,但并非所有的tile(或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);
}
的其他代码。当我使用
{{1}}
我得到这样的东西。
可以使用较小的瓷砖,但不适用于较大的瓷砖。我应该添加什么来保持瓷砖的大小正常,并使用滚动条导航TileView?
没关系,明白了。只是我是傻瓜。
答案 0 :(得分:3)
您需要以下内容:
p_myGraphicsView->fitInView(
myGraphicsView->scene()->itemsBoundingRect(),
Qt::KeepAspectRatio);