Пользовательский виджет для отображения и выбора среди нескольких графических представлений

У меня есть коллекция изображений, динамически генерируемых с помощью виджетов QGraphicsView, и я бы хотел, чтобы мои пользователи могли выбирать между ними. Для этой цели я бы отображал внутри пользовательского виджета доступные изображения в какой-то сетке, и пользователи нажимали бы на то, что их интересует.

Возникает множество вопросов:

  • существует ли существующий виджет, который уже подходит для этой цели?
  • Должен ли я найти способ отключить обработку всех событий мыши элементами QGraphicsView, или я могу добавить прозрачный виджет перед графическими представлениями, который перехватывал бы их?
  • есть ли проблема с производительностью, отображающая много виджетов QGraphicsView (до нескольких сотен)? Должен ли я сначала экспортировать их в обычные изображения?

person Benoît    schedule 24.04.2012    source источник


Ответы (1)


Во-первых, нет, нет никакого виджета, разработанного специально для этой цели.

Я не думаю, что вы понимаете, для чего предназначен QGraphicsView. Он предназначен для отображения QGraphicsScene, предназначенного для хранения многих объектов QGraphicsItem. Основываясь на вашем сообщении, я не понимаю, зачем вам нужно несколько QGraphicsView. Вы можете просто иметь один QGraphicsView и отображать множество изображений внутри его сцены. Например, см. QGraphicsPixmapItem.

У вас определенно не должно быть сотен QGraphicsView. Вы, вероятно, просто хотите один (хотя несколько могут быть оправданы в определенных обстоятельствах), в котором вы отображаете много QGraphicsItems в QGraphicsScene. Вы определенно можете иметь сотни видимых QGraphicsItems одновременно. В вашем случае вам, вероятно, нужны QGraphicsPixmapItems, которые являются подклассом QGraphicsItem. Вы даже можете иметь несколько QGraphicsScenes и отображать любую из них, используя QGraphicsView::setScene. Если вы хотите, чтобы пользователь мог выбрать изображение из сетки, а затем работать с этим изображением, я бы обратился к шаблон состояния.

Я не могу придумать никакой причины для отключения обработки мыши в QGraphicsViews, QGraphicsScenes или QGraphicsItems. Почему они не должны обрабатывать свои собственные события мыши? Вы можете (и должны, при необходимости) создать их подклассы и повторно реализовать события mousePressEvent, mouseMoveEvent, mouseRelease и т. д., чтобы получить желаемую функциональность.

Удачи!

person Anthony    schedule 24.04.2012