防止QGraphicsItem :: itemAt()在“背景项”上

时间:2012-11-05 21:54:40

标签: c++ qt

我正在尝试使用插件设置GUI。在我目前的阶段,我需要用户点击并指定点的位置。

我设置的插件架构要求插件返回插件希望使用的QGraphicsItem。在主程序(未来的插件编写者无法访问)中,我设置了一个背景图像来指导点击。插件可以使用itemChange()偷偷访问scene()并在正在设置的场景上安装eventFilter()。这允许插件访问场景点击并处理它需要的任何信息。但是,itemAt()调用返回背景图片。

我希望阻止这个背景Pixmap使用itemAt()返回所有未来的插件。这可能吗?


尝试:

 setEnabled(false); //No success

2 个答案:

答案 0 :(得分:1)

这不能直接回答你的问题,但它应该可以解决你的问题:我建议重新实现QGraphicsScene::drawBackground()并在那里绘制像素图。这就是方法的用途。

类似的方法是将pixmap放在资源文件中,然后使用样式表将其设置为QGraphicsView或其视口窗口小部件的背景(我认为这些效果略有不同)。

答案 1 :(得分:0)

要使itemAt()(或任何其他碰撞检测方法)不可见,您可以使boundingRect()方法返回零宽度和高度的QRectF。

这虽然有副作用,使QGraphicsView的任何部分视口更新模式出现故障,因为QGV不知道该项目将在哪里绘制自己。这可以通过让QGV对每个重绘进行完全更新来解决(setViewportUpdateMode(QGraphicsView :: FullViewportUpdate))。根据您的场景,这可能是一个可接受的妥协。如果您正在使用OpenGL图形后端,则视口更新无论如何都将始终为完整更新。