2

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

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

我希望防止此背景像素图返回所有未来插件的 itemAt()。这可能吗?


试过:

 setEnabled(false); //No success
4

2 回答 2

1

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

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

于 2012-11-06T16:53:44.920 回答
0

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

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

于 2012-11-06T02:57:52.130 回答