我正在尝试在 Qt 中编写 map 编辑器,对 map 和图 block 表使用 QGraphicsView 和 QGraphicsScene。
我现在遇到的问题是制作一个用于导入图 block 的良好小部件。为此,我使用 QTabWidget(用于不同的图 block 表)和 TileWidget 作为每个选项卡的小部件,其中包含 QGraphicsScene 和 QGraphicsView。
它可以粗略地工作,但并非所有图 block (或 TileObjects,它们是 QGraphicsItem 的实现)都是可见的。我什至调用 view->ensureVisible(scene->sceneRect())
,但即使有滚动条,仍然不是所有 QGraphicsScene 都不可见。
我知道这是由于限制了 QTabWidget 的最大大小,但这是必要的。
这主要发生在我导入较大的图 block 表时。
我有一个TileWidget
作为QTabWidget
的QWidget
,它同时具有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
来处理鼠标释放事件。
要添加图 block ,我只需调用 scene->addItem()
。
我没有 TileView
的其他代码。当我使用时
void TileWidget::showEvent(QShowEvent *event)
{
view->fitInView(scene->itemsBoundingRect(), Qt::KeepAspectRatio);
}
我得到了这样的东西。
对于较小的瓷砖片材来说是可以的,但对于较大的瓷砖片材则不行。我应该添加什么来保持图 block 的大小正常,并使用滚动条导航 TileView?
没关系,想通了。只是我太傻了。
最佳答案
你需要这样的东西:
p_myGraphicsView->fitInView(
myGraphicsView->scene()->itemsBoundingRect(),
Qt::KeepAspectRatio);
关于c++ - 查看整个 QGraphicsScene,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9976178/