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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как заблокировать курсор в заданной области?  (Прочитано 2752 раз)
once_again_abc
Гость
« : Октябрь 04, 2011, 05:57 »

ставлю фильтр, ловлю все мышиные перемещения. хочу ограничить пермещения курсора при нажатой клавише заданным регионом QRect. сейчас делаю вот так:
Код:
mouseMoveEvent( QMouseEvent * pEvent ) {

        if( pEvent->pos().x() > m_Rect.x() + m_Rect.width() ) {
            printf( "[%s] Old: %d, %d, New: %d, %d", __FUNCTION__, pEvent->pos().x(), pEvent->pos().y(), m_Rect.x() + m_Rect.width(), pEvent->pos().y() );
            cursor().setPos( mapToGlobal( QPoint(m_Rect.x() + m_Rect.width(), pEvent->pos().y()) ) );
            return;
        }
}

этот способ работает, но недостаточно хорошо. например если быстро дергать мышью, курсор будет дергаться из-за того, что mouseMoveEvent слишком поздно делает cursor().setPos:

[4648] [::mouseMoveEvent] Old: 812, 159, New: 808, 159
[4648] [::mouseMoveEvent] Old: 819, 159, New: 808, 159
[4648] [::mouseMoveEvent] Old: 854, 158, New: 808, 158

как "железно" заблокировать курсор в некоторой области так, чтобы скорость перемещения мыши не влияла на ситуацию? т.е. в моем данном примере курсор оказался в позициях 812, 819 и 854 хотя я ограничиваю его позицией 808. получается что mouseMoveEvent не всегда вызывается правильно?
Записан
Bepec
Гость
« Ответ #1 : Октябрь 04, 2011, 07:31 »

Насколько я понимаю, mouseMoveEvent вызывается тогда, когда событие уже произошло.

И к тому же опять таки по коду, ты не ставишь фильтр событий, а ловишь просто перемещение мыши на самой форме.

Можешь обратить внимание на QObject::eventFilter( QObject * watched, QEvent * event). По идее должно помочь, но я не использовал ниразу.

PS mouseMoveEvent вызывается ПОСЛЕ перемещения, значит работает правильно Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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