Как сделать выборку на QGraphicsScene? - PullRequest
0 голосов
/ 21 февраля 2011

Я пишу редактор диаграмм в Qt с Graphics View Framework. В настоящее время я просто пытаюсь создать простой узел (QGraphicsItem) в GraphScene (QGraphicsScene). Я создал Canvas (QGraphicsView) и добавил к нему сетку. Я даже могу добавить узлы и перемещать их по сцене. Моя конечная цель - иметь разные рабочие режимы, опции редактирования и стилизации и т. Д. Сейчас я просто хочу узнать, как я могу настроить выбор для узлов, уже присутствующих на сцене. Я попытался сделать это с событиями мыши, но заметил, что вызовы событий для выбора и вставки узла перекрываются ... Когда я пытаюсь выбрать что-то, создается новый узел ... Это мое первое приложение Qt, поэтому я не до конца понимаю, как функциональность, которую я хочу достичь, должна быть разработана.

Как правильно нарисовать прямоугольник выделения? Как мне управлять событиями мыши, которые конфликтуют друг с другом?

Ответы [ 2 ]

1 голос
/ 21 февраля 2011
  • Вы можете использовать проверяемую кнопку / действие (это QPushButton / QAction со свойством checkable, установленным в 'true), чтобы переключаться между режимами редактирования и вставки. Затем вы проверяете состояние в событии мыши и вставляете новый элемент, только если вы находитесь в режиме вставки.
  • Вы также можете различать кнопки мыши - вставьте элемент при перетаскивании правой кнопкой, например
  • Или используйте QKeyboardModifiers - например: при перетаскивании + Ctrl - вставить элемент.

Надеюсь, это поможет.

0 голосов
/ 29 июня 2019

В случае перекрывающихся событий мыши у вас должно быть одно место (например, QGraphicsView для обработки событий щелчка / перемещения мыши) и создать конечный автомат, а затем обрабатывать события в соответствии с состоянием, в котором вы находитесь. Вам необходимохорошо спланируйте свою архитектуру, и это может быть действительно сложной задачей.

  • установите ваши enum / constants состояния
  • ссылаются на текущее состояние машины в ваших событиях в ваших условиях if
  • храните свою "бизнес-логику" в одном месте

Как показано в этих двух уроках NodeEditor # 11 и # 12: https://www.youtube.com/watch?v=pk4v2xuXlm4 и https://www.youtube.com/watch?v=-VYcQojkloE)

Если вам все еще требуется более подробное объяснение функциональности и событий Qt, вот полный список руководств, в которых реализованы все возможные функции, такие как перетаскивание ребер в узлы, их выбор и удаление, режущие кромки, сериализация и т. Д., Выможно посмотреть весь список из 50 уроков, которые я записал здесь: https://www.blenderfreak.com/tutorials/node-editor-tutorial-series/.

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

...