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

C++ 用于在多个图形视图中显示和选择的自定义小部件,c++,qt,selection,qgraphicsview,C++,Qt,Selection,Qgraphicsview,我有一个通过QGraphicsView小部件动态生成的图像集合,我希望我的用户在其中进行选择。为此,我将在一个自定义小部件中以某种网格形式显示可用图像,并让用户单击他们感兴趣的图像 出现了多个问题: 是否有一个现有的小部件已经适合此用途 我应该找到一种方法来禁用QGraphicsView项的所有鼠标事件处理,还是可以在图形视图前面添加一个透明的小部件来拦截它们 显示许多QGraphicsView小部件(最多几百个)是否存在性能问题?我应该先将它们导出为普通图像吗 首先,没有,没有专门为此设计的

我有一个通过QGraphicsView小部件动态生成的图像集合,我希望我的用户在其中进行选择。为此,我将在一个自定义小部件中以某种网格形式显示可用图像,并让用户单击他们感兴趣的图像

出现了多个问题:

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

    • 首先,没有,没有专门为此设计的小部件

      我认为你没有领会QGraphicsView的作用。它用于显示一个QGraphicscene,用于保存许多QGraphicsSite。根据你的帖子,我不明白你为什么需要多个QGraphicsView。您只需拥有一个QGraphicsView,并在其场景中显示许多图像。例如,请参见

      您绝对不应该拥有数百个QGraphicsView。您可能只需要一个(尽管在某些情况下可能有一些是合理的),其中在QGraphicscene中显示许多QGraphicsSite。您肯定可以同时看到数百个QGraphics站点。在您的例子中,您可能需要QGraphicsPixmapItems,它是QGraphicsItem的一个子类。您甚至可以有多个QGraphicsCENES,并使用
      QGraphicsView::setScene
      显示任何相关的QGraphicsCENES。如果您希望用户能够从网格中选择一个图像,然后使用该图像,我将查看

      我想不出任何理由在QGraphicsView、QGraphicscenes或QGraphicsSitems中禁用鼠标处理。为什么它们不应该处理自己的鼠标事件?您可以(并且应该在必要时)对它们进行子类化并重新实现
      mousePressEvent
      mouseMoveEvent
      mousererelease
      事件等,以获得所需的功能

      祝你好运