【问题标题】:expand qgraphicsrectitem to cover complete scene and expand all children's in same proportion扩展 qgraphicsrectitem 以覆盖整个场景并以相同的比例扩展所有孩子
【发布时间】:2016-04-15 17:14:19
【问题描述】:

我创建了一个 QGraphicsView,上面设置了一个带有 QGraphicsRectItem 的场景。

[图-1]

我希望当我双击标有黑色粗边框的绿色矩形时,场景只被这个矩形填充,并且它的所有子元素也以相同的比例展开。

所以,当我双击时,我应该会在完整视图中看到类似这样的内容:

我已经处理了双击事件,但不知道如何处理。

另外,当我再次双击时,我又回到了之前的状态(如图1)

【问题讨论】:

  • 你试过 QGraphicsItem::setScale() 吗?
  • 是的..这不起作用....这个想法是除了这个特定的项目之外,场景中不应有任何其他项目。
  • QGraphicsItem::setScale() 有什么问题?
  • @Tomas :它不会删除场景的其他部分。因此,在我的例子中,如上图 1 所示,应删除象限 1、2 和 4 中的矩形,而上象限 2(如图 2 所示)中的矩形应占据完整的场景空间。
  • 好吧,你总是可以用QGraphicsITem::hide()方法隐藏其他部分。

标签: qt qgraphicsview qgraphicsitem qgraphicsscene


【解决方案1】:

正如QGraphicsView::fitInView 的文档所述

确保项目紧贴视图,根据 aspectRatioMode 缩放视图。

所以,假设pView是你的QGraphicsViewthis是你要查看的矩形,从QGraphicsRectItem的重载双击事件中调用fitInView:-

pView->fitInView(this);

基于只有矩形及其子项应该可见的 cmets,保证这一点的一个选项是,双击时创建一个单独的场景,将矩形移动到新场景并将视图切换到新场景。

【讨论】:

  • 不......这不是我想要的......它会适合视图,但其他部分仍将保留在场景中......只是对该项目应用了缩放...... . 其他项目不应该显示...
  • @Nishant Sharma - 如果用户没有看到场景中的其他部分,有什么问题?
  • @Tomas :使用 firInView,可以看到特定项目,而其他项目仍然存在......根据我的要求,我们想要提供潜入功能。
  • @NishantSharma,根据您的 cmets 更新答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-14
相关资源
最近更新 更多