我有一组图像,通过 QGraphicsView 小部件动态生成,我希望我的用户在它们之间进行选择。为此,我将在某种网格中的自定义小部件中显示可用图像,并让用户单击他们感兴趣的图像。
出现多个问题:
- 是否存在已经适合此目的的现有小部件?
- 我应该找到一种方法来禁用 QGraphicsView 项目的所有鼠标事件处理,还是我可以在图形视图前面添加一个透明小部件来拦截它们?
- 显示许多 QGraphicsView 小部件(最多数百个)是否存在性能问题?我应该先将它们导出为普通图像吗?
我有一组图像,通过 QGraphicsView 小部件动态生成,我希望我的用户在它们之间进行选择。为此,我将在某种网格中的自定义小部件中显示可用图像,并让用户单击他们感兴趣的图像。
出现多个问题:
首先,不,没有专门为此目的设计的小部件。
我认为您没有掌握 QGraphicsView 的用途。它用于显示一个 QGraphicsScene,它是用来容纳许多 QGraphicsItems 的。根据您的帖子,我不明白您为什么需要多个 QGraphicsViews。您可以简单地拥有一个 QGraphicsView 并在其场景中显示许多图像。例如,请参阅QGraphicsPixmapItem。
你绝对不应该有数百个 QGraphicsViews。您可能只想要一个(尽管在某些情况下可能有一些是合理的),其中您在 QGraphicsScene 中显示许多 QGraphicsItem。您绝对可以同时看到数百个 QGraphicsItem。在您的情况下,您可能需要 QGraphicsPixmapItems,它是 QGraphicsItem 的子类。您甚至可以拥有多个 QGraphicsScene,并使用QGraphicsView::setScene
. 如果您希望用户能够从网格中选择图像,然后使用该图像,我会查看State Pattern。
我想不出任何理由在 QGraphicsViews、QGraphicsScenes 或 QGraphicsItems 中禁用鼠标处理。为什么这些不应该处理自己的鼠标事件?您可以(并且应该在必要时)对它们进行子类化并重新实现mousePressEvent
, mouseMoveEvent
, mouseRelease
event 等以获得所需的功能。
祝你好运!