crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Ограничить перемещение курсора
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юда прикрепить не смог, ссылка: Link
Там все проект, проблема в battlefieldbutton.cpp
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Delaar
  опции профиля:
сообщение 3.12.2011, 17:18
Сообщение #4


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 3.12.2011
Пользователь №: 3040

Спасибо сказали: 0 раз(а)




Репутация:   0  


Cюда прикрепить не смог, ссылка: Link
Там все проект, проблема в battlefieldbutton.cpp

Дополнение...пока кое-как ограничивается только движение вправо от центра scrollarea.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 3.12.2011, 18:36
Сообщение #5


Активный участник
***

Группа: Участник
Сообщений: 297
Регистрация: 23.6.2011
Пользователь №: 2765

Спасибо сказали: 45 раз(а)




Репутация:   3  


Цитата
но при быстром - выходит за его пределы.

Проблема связана с тем что не успевает генерироваться событие. Можно решить путем установки EventFilter на приложение (QApplication), тогда можно будет контролировать координаты мыши даже если она успеет выйти за пределы виджета.
Link
Link
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Dovgon
  опции профиля:
сообщение 4.12.2011, 9:26
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 92
Регистрация: 5.1.2011
Пользователь №: 2325

Спасибо сказали: 3 раз(а)




Репутация:   0  


так просто не получится, надо делать в MainWindow mouseMoveEvent, после сигналом передовать в BattleFieldButton передовать QMouseEvent *mouse::globalX();
В самом BattleFieldButton слоте делать гдето так
int xPos=parent_widget->pos().x()+parent_widget->rect().width(); пробуй.
if (globalX >= xPos)
        QCursor::setPos(kursor - QPoint(globalX-xPosOld+2,0 ) );

где xPosOld предвидущий globalX т.к движение не обязательно на 1 pix.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Delaar
  опции профиля:
сообщение 4.12.2011, 23:36
Сообщение #7


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 3.12.2011
Пользователь №: 3040

Спасибо сказали: 0 раз(а)




Репутация:   0  


Благодарю всех отписавшихся. Попробовал фильтры, не заработало как надо (курсор таки мог вылететь за пределы дозволенного).
Решил поставить к виджету таймер, и в обработчике, если нужно - задавать координаты курсора. Таки получилось, как хотел.
По ссылке ниже - проект. Смотреть battlescrollarea.

Link
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ssoft
  опции профиля:
сообщение 5.12.2011, 7:06
Сообщение #8


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 17.2.2010
Из: Москва
Пользователь №: 1470

Спасибо сказали: 30 раз(а)




Репутация:   3  


Нужно обязательно переопределить событие leaveEvent
Оно возникает при попытке курсора мыши покинуть widget.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.12.2025, 22:53