【发布时间】:2014-10-21 00:32:29
【问题描述】:
我正在制作一个图表(Fluxogram)程序,几天来我一直被这个问题困扰:
我有一个自定义的QGraphicsScene,只要我将一个项目放在它最右边的区域,它就会水平扩展。问题是我的自定义箭头(它们继承QGraphicsPathItem)在boundingRect() 中心滚动离开视图时从场景中消失。每次场景扩展时,sceneRect() 和视图的 sceneRect() 都会更新。
我已经:
set ui->graphicsView->setViewportUpdateMode(QGraphicsView::FullViewportUpdate)
项目标志QGraphicsItem::ItemIgnoresTransformations和QGraphicsItem::ItemSendsGeometryChanges,setActive(true)也在项目上,每次我向场景添加箭头时,我都会调用update(sceneRect())方法。尽管如此,每次我滚动视图时,只要箭头的boundingRect() 中心远离视图,所有箭头都会消失。如果我向后滚动并且 boundingRect() 中心进入视图,所有的箭头都会再次出现。
有人可以告诉我我可能缺少什么吗?我一直在使用 Qt 的示例项目图表场景作为参考,所以我的很多代码都是相似的(“按项目工具按钮 -> 单击场景”关系插入项目,它们放置箭头以连接对象的方式,。 ..)。
与此同时,我将尝试制作一个可以显示我的问题的最小运行示例。
【问题讨论】:
-
我做了一个最简单的例子,我可以保留我迄今为止用来解决这个问题的方法。我已经粘贴到pastebin了(不知道这里能不能用,所以如果不是应该怎么做请告诉我,只是为了确定定位和重新调整场景有很多编码): 头文件:pastebin.com/43Vzkrkq; C++ 文件:pastebin.com/aLuE5Yg4;用户界面文件:pastebin.com/1mHWL0hG
-
我怀疑问题出在项目的 boundingRect 上。尝试在paint函数中绘制它,看看它是否是您期望看到的。
-
就是,它绘制了箭头连接的 2 个项目周围的矩形。问题是当我们在网格的最右边添加一些项目时,场景会水平扩展,如果我们滚动,只要 boundingRect 中心(项目的 (0,0) )离开视图的视线,整个箭头消失了,如果我们滚动直到中心再次可见,整个箭头就会再次出现。我需要的是让箭头始终可见,无论可见区域有多小。
标签: c++ qt qgraphicsitem qgraphicsscene