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юда прикрепить не смог, ссылка: 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 слоте делать гдето так
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.

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


Участник
**

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

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




Репутация:   3  


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

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


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




RSS Текстовая версия Сейчас: 29.11.2024, 5:52