查看整个 QGraphicsScene

Posted

技术标签:

【中文标题】查看整个 QGraphicsScene【英文标题】:Viewing entire QGraphicsScene 【发布时间】:2012-04-02 12:11:39 【问题描述】:

我正在尝试在 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?

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

【问题讨论】:

【参考方案1】:

你需要这样的东西:

p_myGraphicsView->fitInView(
    myGraphicsView->scene()->itemsBoundingRect(),
    Qt::KeepAspectRatio);

【讨论】:

这是记录在案的做你想做的事的方式。当然,这只有在QGraphicsItem::boundingRect() 的实现是正确的情况下才有效。我担心托管您的图片的网站在我工作时被屏蔽了,所以如果在此期间没有其他人回答,我会稍后再看看。 我意识到我错误地实现了你的代码。当没有添加任何项目时,我在构造函数中调用它。但是,在添加所有项目后调用它也无济于事。它将所有瓷砖缩小到一个很小的角落。添加所有项目后,我尝试使用setSceneRect()。有了它,所有水平的瓷砖都是可见的,但我仍然不能一直向下滚动。你需要我发布一些代码吗?也许我完全错误地实现它。 @Rikonator,代码不应进入构造函数。 QGraphicsView 的细微差别之一是,在 after 显示之前,您不能对它做很多事情(在构造函数的末尾还没有显示)。尝试重新实现 QWidget::showEvent(),然后将 Styne666 的代码放在那里。 澄清一下,我并不是要重新实现 QGraphicsView::showEvent() (虽然这可能有效,但我不知道......),我的意思是重新实现 QDialog::showEvent() ,或任何你的窗口。 t 适用于较小的瓷砖。但是,对于较大的,它会尝试在小部件中适应场景,因此图块表按比例缩小。我尝试为QGraphicsView 设置viewport() 的最大尺寸,但我仍然无法滚动整个场景以获得更大的瓷砖。这是否与QAbstractScrollAreaQGraphicsView 有更多关系?

以上是关于查看整个 QGraphicsScene的主要内容,如果未能解决你的问题,请参考以下文章

查看整个 MySQL 数据库的所有外键约束

NodeJS 6:如何查看整个错误堆栈跟踪? [复制]

如何在 python 中查看整个矩阵? [复制]

UICollectionView 无法滚动查看整个最后一行

sh 用diffs查看文件的整个历史记录

sh 用diffs查看文件的整个历史记录