Я использую QGraphincsView, который содержит несколько элементов, которые наследуются от QGraphicsItem. Все прекрасно работает, я могу выбрать их по своему желанию. И когда я удерживаю клавишу Ctrl, я могу выбрать несколько из них.
Теперь я хочу реализовать дополнительный многоэкранный выбор без необходимости удерживать клавишу Ctrl. Я уже пытался установить связанный модификатор в mouse-press-event, вызвав
evt->setModifiers(Qt::ControlModifier);
до того, как событие будет передано ему базовым классом QGraphicsItem, но это не сработает.
Итак, мой вопрос: что нужно сделать, чтобы получить множественные функции выбора по умолчанию и не удерживая клавишу?
Благодарю!
Это контролируется QGraphicsScene. Вы заявили:
Я использую QGraphincsView, который содержит несколько элементов, которые наследуют от QGraphicsItem
На самом деле это не так. QGraphicsView - это окно в область сцены; это QGraphicsScene, который содержит элементы, полученные из QGraphicsItem.
Вы можете видеть в документации, что QGraphicsScene имеет такие функции, как selectedItems(), selectionArea() и setSelectionArea(). Хотя QGraphicsItem может быть выбран с помощью QGraphicsItem :: setSelected, управление тем, что происходит, когда вы нажимаете элемент, управляется QGraphicsScene, когда событие передается из QGraphicsView.
Если вы наследуете QGraphicsScene, вы можете переопределить методы мыши; mousePressEvent, mouseMoveEvent, mouseReleaseEvent. Это позволит вам отслеживать, когда пользователь выбирает последовательные элементы, нажимая на них и реагируя, вызывая их функцию QGraphicsItem :: setSelected.
В качестве альтернативы, в зависимости от вашего дизайна, вы можете разрешить пользователю рисовать область на сцене и вызывать QGraphicsScene :: setSelectionArea, которая будет устанавливать все элементы, окруженные данным QPainterPath.