Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: qtkoder777 от Февраль 21, 2018, 15:10



Название: Игровая мышь на Qt
Отправлено: qtkoder777 от Февраль 21, 2018, 15:10
Можно ли сделать обработку мыши как в играх: мышь передвинулась, игрок повернулся - независимо от курсора.
В QMouseEvent не нашел таких свойств. Курсор в край экрана упёрся события больше не идут.


Название: Re: Игровая мышь на Qt
Отправлено: kai666_73 от Февраль 21, 2018, 17:01
Надо перекрыть
Код
C++ (Qt)
virtual void mouseMoveEvent(QMouseEvent*pe);
 

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


Название: Re: Игровая мышь на Qt
Отправлено: qtkoder777 от Февраль 21, 2018, 17:53
Надо перекрыть
Код
C++ (Qt)
virtual void mouseMoveEvent(QMouseEvent*pe);
 

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


Так и сделано, но mouseMoveEvent не стреляет когда мыш на краю


Название: Re: Игровая мышь на Qt
Отправлено: kai666_73 от Февраль 22, 2018, 11:00
Не совсем понимаю какое поведение нужно реализовать. Но возможно, поможет перекрытие методов
Код
C++ (Qt)
void hoverEnter(QHoverEvent *event);
void hoverLeave(QHoverEvent *event);
 

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


Название: Re: Игровая мышь на Qt
Отправлено: Igors от Февраль 22, 2018, 12:15
Курсор в край экрана упёрся события больше не идут.
Намучился с этой проблемой, в конце-концов сделал так: скрыть курсор мыши и поместить его в центр экрана. Тогда "запас хода" получается хорошим.. Правда при этом бывает потеря след события (так и не добил)


Название: Re: Игровая мышь на Qt
Отправлено: Dimas от Февраль 22, 2018, 20:04
Я когда-то подобную задачу решал для трекбола. Когда, вращением трекбола задавалась угловая скорость перемещения телекамеры. Тоже курсор упирался в край. Я решил просто. Когда курсор упирался в край экрана передвигал курсор в противоположную сторону экрана, получалось циклическое движение курсора, а курсор естественно делал невидимым на время работы режима управления камерой.


Название: Re: Игровая мышь на Qt
Отправлено: Bepec от Март 04, 2018, 10:13
QMouseEvent и прочие - это события окна о передвижении курсора.
Обычно в играх либо курсор перебрасывается( как предложил Dimas), либо заякоривается(после каждого передвижения вызывается moveCursor(centerWindow)), либо идёт прямая обработка данных с устройства ( типа directinput, там нет координат, там просто "передвинулся туда на столько то").