Моя проблема - плохой резистивный сенсорный экран. Когда вы проводите пальцем по экрану. Перетаскивание случайно прерывается из-за события MouseButtonRelease.
Я бы хотел это исправить, отфильтровав mouseEvents и удалив все последовательные события MouseButtonRelease и MouseButtonPress, если они произошли, например. менее 100 мс Я хотел бы сделать это для всего приложения.
Я уже пробовал eventFilter, но он не работает должным образом. Сохраненные события MouseButtonRelease не отправляются нужным объектам. Я установил это с помощью installEventFilter (новый MouseFilter (это)); в виджете, но все выпуски мыши теряются.
Вы предлагаете другой подход или что-то не так с моим кодом?
#include "mousefilter.h"
#include <QApplication>
#include <QEvent>
#include <QMouseEvent>
#include <QTimer>
MouseFilter::MouseFilter(QObject *parent) :
QObject(parent),
storedEvent_(0)
{
}
void MouseFilter::send() {
if ( storedEvent_ == 0 ) {
return;
}
QApplication::sendEvent(parent(), storedEvent_);
delete storedEvent_;
storedEvent_ = 0;
}
bool MouseFilter::eventFilter(QObject *object, QEvent *event) {
if ( event->type() == QEvent::MouseButtonRelease ) {
QMouseEvent* release = static_cast<QMouseEvent*>(event);
// Dalay the event
storedEvent_ = new QMouseEvent(QEvent::MouseButtonRelease, release->pos(), release->globalPos(),
release->button(), release->buttons(), release->modifiers());
QTimer::singleShot(100, this, SLOT(send()));
return true;
}
else if ( storedEvent_ != 0 && event->type() == QEvent::MouseButtonPress ) {
// Clear stored release and ignore new press.
delete storedEvent_;
storedEvent_ = 0;
return true;
}
return QObject::eventFilter(object, event);
}