Ограничить перемещение курсора |
Здравствуйте, гость ( Вход | Регистрация )
Ограничить перемещение курсора |
Delaar |
3.12.2011, 15:55
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 3.12.2011 Пользователь №: 3040 Спасибо сказали: 0 раз(а) Репутация: 0 |
Добрый день, форумчане. Подскажите, каким образом разрешить курсору перемещение
в пределах одного виджета. На данный момент пробую подход с SetMouseTracking(true) у нужного виджета и обработчика mouseMoveEvent, где проверяются текущие координаты курсора и в случае их выхода за пределы виджета - они изменяются на допустимые. Возникает проблема, которую решить не могу: при медленном движении мыши курсор действительно удерживается в пределах виджета, но при быстром - выходит за его пределы. |
|
|
Dovgon |
3.12.2011, 16:37
Сообщение
#2
|
Студент Группа: Участник Сообщений: 92 Регистрация: 5.1.2011 Пользователь №: 2325 Спасибо сказали: 3 раз(а) Репутация: 0 |
приведи код.
|
|
|
Delaar |
3.12.2011, 17:15
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 3.12.2011 Пользователь №: 3040 Спасибо сказали: 0 раз(а) Репутация: 0 |
Cюда прикрепить не смог, ссылка: http://webfile.ru/5706577
Там все проект, проблема в battlefieldbutton.cpp |
|
|
Delaar |
3.12.2011, 17:18
Сообщение
#4
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 3.12.2011 Пользователь №: 3040 Спасибо сказали: 0 раз(а) Репутация: 0 |
Cюда прикрепить не смог, ссылка: http://webfile.ru/5706577
Там все проект, проблема в battlefieldbutton.cpp Дополнение...пока кое-как ограничивается только движение вправо от центра scrollarea. |
|
|
ilyabvt |
3.12.2011, 18:36
Сообщение
#5
|
Активный участник Группа: Участник Сообщений: 297 Регистрация: 23.6.2011 Пользователь №: 2765 Спасибо сказали: 45 раз(а) Репутация: 3 |
Цитата но при быстром - выходит за его пределы. Проблема связана с тем что не успевает генерироваться событие. Можно решить путем установки EventFilter на приложение (QApplication), тогда можно будет контролировать координаты мыши даже если она успеет выйти за пределы виджета. http://doc.qt.nokia.com/latest/eventsandfilters.html http://doc.qt.nokia.com/latest/qobject.htm...tallEventFilter |
|
|
Dovgon |
4.12.2011, 9:26
Сообщение
#6
|
Студент Группа: Участник Сообщений: 92 Регистрация: 5.1.2011 Пользователь №: 2325 Спасибо сказали: 3 раз(а) Репутация: 0 |
так просто не получится, надо делать в MainWindow mouseMoveEvent, после сигналом передовать в BattleFieldButton передовать QMouseEvent *mouse::globalX();
В самом BattleFieldButton слоте делать гдето так
где xPosOld предвидущий globalX т.к движение не обязательно на 1 pix. |
|
|
Delaar |
4.12.2011, 23:36
Сообщение
#7
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 3.12.2011 Пользователь №: 3040 Спасибо сказали: 0 раз(а) Репутация: 0 |
Благодарю всех отписавшихся. Попробовал фильтры, не заработало как надо (курсор таки мог вылететь за пределы дозволенного).
Решил поставить к виджету таймер, и в обработчике, если нужно - задавать координаты курсора. Таки получилось, как хотел. По ссылке ниже - проект. Смотреть battlescrollarea. http://webfile.ru/5708617 |
|
|
ssoft |
5.12.2011, 7:06
Сообщение
#8
|
Участник Группа: Участник Сообщений: 130 Регистрация: 17.2.2010 Из: Москва Пользователь №: 1470 Спасибо сказали: 30 раз(а) Репутация: 3 |
Нужно обязательно переопределить событие leaveEvent
Оно возникает при попытке курсора мыши покинуть widget. |
|
|
Текстовая версия | Сейчас: 29.11.2024, 5:52 |