Как в QT отслеживать положение указателя мыши?

nemec2707

Прошу сильно не пинать, только начинаю изучать QT.
Глобально задача такая - написать гуи, который позволит при помощи мыши вертеть реальным механизмом в пространстве. Примерно вот так http://vk.com/video689180_165157768 , но здесь используются ползунки)
Теперь мне бы хотелось запилить в области гуя некоторую область, в пределах которой можно перемещать курсор мыши и получать ее координаты. И было бы здорово, если бы область не выпускала курсор за пределы себя.
Как это правильнее всего сделать? Можно в паре предложений, чтоб я просто понял, в какую сторону копать.

ppplva

Типа такого, наверное
http://stackoverflow.com/questions/1935021/getting-mousemove...
QT не знаю.

nemec2707

Отлично, нашел, как получать координаты мыши.

Актален вопрос с ее захватом и невыпусканием за пределы окна.

nemec2707

Придумал, как реализовать задуманное: есть класс QCursor, он позволяет устанавливать курсор мыши в произвольное положение.
Сделаю вот что: как только курсор оказывается за допустимыми пределами, он тут же выставляется в ближайшее допустимое положение. Для включения-выключения этого "захвата" будет специальная кнопочка.
Такие дела

apl13

jpg, yes! :applause: :dance2: :ole:

0000

А ты точно не что-то странное желаешь?
Допустим запустили твою прогу, курсор помещается в эту область и больше никуда не пущается - ни к другим областям GUI, ни к другим программам.
Понятно, что можно будет вернуться клавой, но как то всё это не очень.
Если делать область, то имхо просто перемещение по ней отслеживать - подвинули мышь на 50пикселей вверх - камера повернулась на 5градусов вверх.
Для более быстрой крутилки продублировать область двумя ползунками.

margadon

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

ppplva

Вообще такое обычно делают через захват мыши по нажатию кнопки на областью.

nemec2707

Неплохая идея, но левую кнопку надо иметь возможность нажимать в процессе управления.
Приложение - для управления роботом. Wasd его двигают, а мышью крутится башня с камерой и ведется стрельба) как в контре кароч)

margadon

тогда пользователь кликает на область, мышь прячется и тогда уже до нажатия ESC мышь забирается программой, а потом восстанавливается где была до клика

nemec2707

Не совсем очевидно, как "забрать" мышь

ppplva

Прочитать по ссылке из моего первого ответа
Оставить комментарий
Имя или ник:
Комментарий: