Выберите несколько элементов QGraphicsItems, не удерживая нажатой клавишу

0

Я использую QGraphincsView, который содержит несколько элементов, которые наследуются от QGraphicsItem. Все прекрасно работает, я могу выбрать их по своему желанию. И когда я удерживаю клавишу Ctrl, я могу выбрать несколько из них.

Теперь я хочу реализовать дополнительный многоэкранный выбор без необходимости удерживать клавишу Ctrl. Я уже пытался установить связанный модификатор в mouse-press-event, вызвав

evt->setModifiers(Qt::ControlModifier);

до того, как событие будет передано ему базовым классом QGraphicsItem, но это не сработает.

Итак, мой вопрос: что нужно сделать, чтобы получить множественные функции выбора по умолчанию и не удерживая клавишу?

Благодарю!

Теги:
qt
qt5
qt5.2

1 ответ

1

Это контролируется QGraphicsScene. Вы заявили:

Я использую QGraphincsView, который содержит несколько элементов, которые наследуют от QGraphicsItem

На самом деле это не так. QGraphicsView - это окно в область сцены; это QGraphicsScene, который содержит элементы, полученные из QGraphicsItem.

Вы можете видеть в документации, что QGraphicsScene имеет такие функции, как selectedItems(), selectionArea() и setSelectionArea(). Хотя QGraphicsItem может быть выбран с помощью QGraphicsItem :: setSelected, управление тем, что происходит, когда вы нажимаете элемент, управляется QGraphicsScene, когда событие передается из QGraphicsView.

Если вы наследуете QGraphicsScene, вы можете переопределить методы мыши; mousePressEvent, mouseMoveEvent, mouseReleaseEvent. Это позволит вам отслеживать, когда пользователь выбирает последовательные элементы, нажимая на них и реагируя, вызывая их функцию QGraphicsItem :: setSelected.

В качестве альтернативы, в зависимости от вашего дизайна, вы можете разрешить пользователю рисовать область на сцене и вызывать QGraphicsScene :: setSelectionArea, которая будет устанавливать все элементы, окруженные данным QPainterPath.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню