用于在多个图形视图中显示和选择的自定义小部件

时间:2012-04-24 09:44:06

标签: c++ qt selection qgraphicsview

我有一组图像,通过QGraphicsView小部件动态生成,我希望我的用户可以在它们之间进行选择。为此,我会在自定义窗口小部件中显示某种网格中的可用图像,并让用户单击他们感兴趣的图像。

出现了多个问题:

  • 是否有适合此目的的现有小部件?
  • 我应该找到一种方法来禁用QGraphicsView项目的所有鼠标事件处理,还是可以在图形视图前添加透明小部件来拦截它们?
  • 是否存在显示许多QGraphicsView小部件(最多几百个)的性能问题?我应该首先将它们导出为普通图像吗?

1 个答案:

答案 0 :(得分:1)

首先,不,没有专门为此目的而设计的小部件。

我认为你并没有抓住QGraphicsView的用途。它用于显示QGraphicsScene,用于保存许多QGraphicsItems。根据你的帖子,我不明白为什么你需要多个QGraphicsViews。您只需拥有一个QGraphicsView并在其场景中显示许多图像。例如,请参阅QGraphicsPixmapItem

你绝对不应该有数百个QGraphicsViews。你可能只想要一个(虽然在某些情况下有一些可能是合理的),你在QGraphicsScene中显示许多QGraphicsItems。你肯定可以同时看到数百个QGraphicsItems。在您的情况下,您可能需要QGraphicsPixmapItems,它是QGraphicsItem的子类。您甚至可以拥有多个QGraphicsScenes,并使用QGraphicsView::setScene显示相关的QGraphicsScenes。如果您希望用户能够从网格中选择图像,然后使用该图像,我会查看State Pattern

我无法想到在QGraphicsViews,QGraphicsScenes或QGraphicsItems中禁用鼠标处理的任何理由。为什么这些不能处理自己的鼠标事件?您可以(并且应该在必要时)将它们子类化并重新实现mousePressEventmouseMoveEventmouseRelease事件等,以获得您想要的功能。

祝你好运!