我正在尝试用Qt编写一个地图编辑器,使用QGraphicsView和QGraphicsScene来处理地图和图片表。
我现在遇到的问题是如何制作一个好的小部件来导入磁贴。为此,我使用了一个QTabWidget (用于不同的TileWidget ),并使用TileWidget作为每个选项卡的小部件,其中包含QGraphicsScene和QGraphicsView。
它工作得很粗糙,但并不是所有的tiles (或TileObjects,它们是QGraphicsItem的实现)都是可见的。我甚至调用了view->ensureVisible(scene->sceneRect()),但即使有滚动条,也不是所有的QGraphicsScene都是可见的。
我知道这是由于限制了我的QTabWidget的最大尺寸,但这是必要的。
这主要发生在我导入较大的平铺工作表时。
我有一个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,用于处理鼠标释放事件。
要添加磁贴,我只需调用scene->addItem()。
我没有用于TileView的其他代码。当我使用
void TileWidget::showEvent(QShowEvent *event)
{
view->fitInView(scene->itemsBoundingRect(), Qt::KeepAspectRatio);
}我得到了这样的东西。

它可以用于较小的瓷砖,但不适用于较大的瓷砖。我应该添加什么来保持磁贴的正常大小,并使用滚动条导航TileView?
算了,算出来了。只是我太傻了。
发布于 2012-04-02 20:23:21
你需要这样的东西:
p_myGraphicsView->fitInView(
myGraphicsView->scene()->itemsBoundingRect(),
Qt::KeepAspectRatio);https://stackoverflow.com/questions/9976178
复制相似问题