2011-12-17 3 views
3

Я пишу приложение, которое вводится от 3-х мышей. 2 из мышей используются для жестов, и их ввод обрабатывается отдельно, третий должен функционировать как нормальный. Я успешно установил eventfilter (см. Ниже), который запускает мой собственный код обработки мыши (processMouse()).выборочно игнорируя события мыши в Qt

Однако при попытке заставить фильтр игнорировать события от определенных мышей (определяется логическим значением возврата processMouse()), ничто не игнорируется.

Я попытался использовать нормальные значения true/false return, сбросив событие на событие «Нет», вызвав его функцию игнорирования, но мышь все еще продолжает двигаться, даже когда я говорю ей игнорировать событие.

bool MainWindow::eventFilter(QObject *obj, QEvent *event){ 
    if ((event->type() == QEvent::MouseMove) || 
     (event->type() == QEvent::MouseButtonPress)){ 
     if (configured){ 
      if (!processMouse()){ 
       //event->ignore(); 
       //event = new QEvent(QEvent::None); 
      } 
     } 
     return true; 

    } 
    return false; 
} 

Как можно выборочноигнорировать MouseMove события из eventfilter?

+1

Движение мыши не обрабатывается Qt, оно обрабатывается вашим оконным менеджером. Событие mouseMove - это всего лишь сигнал от диспетчера окон к Qt, вы не можете отменить его из своего приложения (не зная много о вашем оконном менеджере и среде) – Mat

+0

Назначение чего-либо событию не изменяет оригинальное событие (и его обработка). Он просто изменяет значение вашей локальной переменной указателя, теперь указывая на вновь созданное событие (которое будет потеряно) вместо фактически обработанного. Это назначение является локальным для вашего метода, оно не будет замечено нигде. –

+0

Спасибо за разъяснение, теперь я пытаюсь поработать с ним, используя возвращаемое значение моей функции processMouse, чтобы определить, следует ли установить позицию курсора. это, вероятно, будет не так красиво, как рисование и внедрение нового, но оно должно работать для моих целей. – Energya

ответ

2

В конечном итоге это было разрешено с помощью сторонней библиотеки с именем «ManyMouse», которая получает каждый входной сигнал каждой мыши отдельно.

Смежные вопросы