2010-03-03 2 views
1

Я пишу небольшую утилиту GUI в Qt4, которая использует QGraphicsScene. Один из элементов отслеживает мышь в горизонтальной плоскости, когда вы ее перемещаете, а удерживание клавиши модификатора позволяет изменить поворот элемента. При повороте элементов я бы хотел, чтобы курсор мыши переключился на соблазнительную стрелу (или что-то еще) и зафиксировал визуально на месте, поэтому перемещение влияет на элемент, но не на сам курсор мыши.Qt4: Блокировка курсора мыши на месте при манипулировании QGraphicsItem

отпускание модификатора поместят (ранее невидимый) курсор назад к его первоначальной точка: это предотвратить пункт «прыжки» в новом горизонтальное положение мышей после, что моя главная проблема.

Я никогда действительно получил ни малейшего представления о том, как реализовать это в Qt4, которая не предполагает делать ужасные вещи, как:

  • Если модификатор нажата сохранить текущее положение мыши
  • Переключите курсор растровое ничего
  • Как-то нарисовать поддельный курсор в исходном месте (!?)
  • Удалить поддельный курсор и переключить позицию мыши назад, когда сделано

Будьте очень благодарны, если кто-нибудь может подумать о лучшем способе достижения этого. Вначале я не слишком привязан ко всей идее курсора с фиксированным курсором мыши, но это единственный способ, с помощью которого я могу решить эту проблему с помощью схемы управления, которая в противном случае работает очень хорошо.

Редактировать: Я попробовал схему дерьма, описанную выше, и столкнулся с проблемами, программно перемещающими положение мыши. Все еще пытаясь вспомнить, где я использовал подобную систему раньше: в основном это вращающаяся ручка. Вы щелкнули его и переместили мышь вверх и вниз, которая повернула ручку. Когда вы отпустите кнопку мыши, указатель вернется туда, где вы первоначально положили его, на ручке.

ответ

1

Как насчет использования фильтра событий для обнаружения QMouseEvents, пока это происходит?

+0

Большое спасибо за полезное предложение. Я просмотрел его, и фильтр событий выглядит как лучший способ пойти сюда (и для многих других вещей - я никогда не использовал их раньше.) Я попытался реализовать (ужасный) метод, который я изложил, но столкнулся с ним странные проблемы, пытающиеся манипулировать фактическим указателем мыши (в отличие от курсора) и, в конечном счете, отказаться от него по совсем другой схеме, которая имеет такой же плохой запах кода. – Mikesname

+0

BTW, я уверен, что видел объект с фиксированным курсором в действии для Windows, например. перемещение виртуальных ручек на программные синтезаторы и т. п., поэтому мне все равно интересно узнать, как вы это делаете. – Mikesname

Смежные вопросы