Russian Qt Forum
Ноябрь 22, 2024, 17:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Игровая мышь на Qt  (Прочитано 4881 раз)
qtkoder777
Частый гость
***
Offline Offline

Сообщений: 245


Просмотр профиля
« : Февраль 21, 2018, 15:10 »

Можно ли сделать обработку мыши как в играх: мышь передвинулась, игрок повернулся - независимо от курсора.
В QMouseEvent не нашел таких свойств. Курсор в край экрана упёрся события больше не идут.
Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #1 : Февраль 21, 2018, 17:01 »

Надо перекрыть
Код
C++ (Qt)
virtual void mouseMoveEvent(QMouseEvent*pe);
 

И для соотв. объекта выполнить
Код
C++ (Qt)
setMouseTracking(true)
 
Записан
qtkoder777
Частый гость
***
Offline Offline

Сообщений: 245


Просмотр профиля
« Ответ #2 : Февраль 21, 2018, 17:53 »

Надо перекрыть
Код
C++ (Qt)
virtual void mouseMoveEvent(QMouseEvent*pe);
 

И для соотв. объекта выполнить
Код
C++ (Qt)
setMouseTracking(true)
 


Так и сделано, но mouseMoveEvent не стреляет когда мыш на краю
Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #3 : Февраль 22, 2018, 11:00 »

Не совсем понимаю какое поведение нужно реализовать. Но возможно, поможет перекрытие методов
Код
C++ (Qt)
void hoverEnter(QHoverEvent *event);
void hoverLeave(QHoverEvent *event);
 

Если же нужно отслеживать события перемещения мыши за пределами виджета, то следует использовать методы
Код
C++ (Qt)
void QWidget::grabMouse()
void QWidget::releaseMouse()
 
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Февраль 22, 2018, 12:15 »

Курсор в край экрана упёрся события больше не идут.
Намучился с этой проблемой, в конце-концов сделал так: скрыть курсор мыши и поместить его в центр экрана. Тогда "запас хода" получается хорошим.. Правда при этом бывает потеря след события (так и не добил)
Записан
Dimas
Чайник
*
Offline Offline

Сообщений: 50



Просмотр профиля
« Ответ #5 : Февраль 22, 2018, 20:04 »

Я когда-то подобную задачу решал для трекбола. Когда, вращением трекбола задавалась угловая скорость перемещения телекамеры. Тоже курсор упирался в край. Я решил просто. Когда курсор упирался в край экрана передвигал курсор в противоположную сторону экрана, получалось циклическое движение курсора, а курсор естественно делал невидимым на время работы режима управления камерой.
Записан

qt 4.8.6, qt 5.12.4
Bepec
Гость
« Ответ #6 : Март 04, 2018, 10:13 »

QMouseEvent и прочие - это события окна о передвижении курсора.
Обычно в играх либо курсор перебрасывается( как предложил Dimas), либо заякоривается(после каждого передвижения вызывается moveCursor(centerWindow)), либо идёт прямая обработка данных с устройства ( типа directinput, там нет координат, там просто "передвинулся туда на столько то").
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.191 секунд. Запросов: 23.