Qt5 Игнорирование Собственных Сенсорных Событий

#c #linux #qt5 #touch #rhel

Вопрос:

Пару лет назад мне пришлось внедрить функции touch в приложение, но моя компания все еще использовала Scientific Linux 6.4, который изначально не поддерживал touch, не говоря уже о мультитач. К счастью, мне удалось обновлении ядра к 2.6.32-754, который дал мне доступ к мультисенсорные события, и хотя они были изначально не справился, я был в состоянии написать свое «водитель» в приложение, которое будет читать из/dev/вход/событие — файл и использовать в input_event классе в ядре, чтобы захватить события касания и перевести их поведением приложения.

Теперь, два года спустя, мы, наконец, переходим на RedHat 8, и, очевидно, теперь появилась поддержка native touch. Почти весь мой код по-прежнему требуется, поскольку он очень специфичен для этого приложения, и я не вижу особого смысла что-либо переписывать. Однако, поскольку события касания теперь распознаются изначально, я вижу некоторые проблемы, при которых события нажатия будут регистрироваться дважды-один раз из операционной системы и один раз из моего драйвера. События сенсорного нажатия от моего водителя необходимы, потому что они отслеживаются и обрабатываются моим водителем.

Есть ли способ обновить драйвер, чтобы игнорировать собственные события касания ОС, которые мешают работе моего драйвера, не влияя на его работу? Это особенно характерно для экранной клавиатуры, которая при нажатии кнопки дважды вводит один и тот же символ.

Комментарии:

1. Вы пробовали записывать события с помощью встроенного фильтра событий ?

2. Действительно ли события сенсорного ввода, создаваемые вашим драйвером, отличаются от событий ввода по умолчанию RedHat 8? Если да, вам понадобится средство для их различения, например, с помощью message аргумента собственного фильтра событий, показанного выше. В противном случае с QTouchEvent вы мало что можете сделать. Лучше всего было бы, если бы вы избавились от своего водителя.

Ответ №1:

Простым решением этой проблемы, по-видимому, было xinput отключить ввод с сенсорного экрана, что дало мне желаемое поведение. Причина, по которой я не хочу переписывать код, обрабатывающий его, заключается в том, что это потребует много усилий и времени без каких-либо различий в поведении или производительности. Я не могу просто использовать собственное касание, потому что пользовательский интерфейс использует не только действия с одним касанием, но и пользовательские жесты, которые интерпретируются моим драйвером.