我的问题是电阻式触摸屏很差。当您在屏幕上拖动手指时。由于MouseButtonRelease事件,拖动随机切断。
我想通过过滤mouseEvents并删除所有连续的MouseButtonRelease和MouseButtonPress事件来解决这个问题。不到100毫秒的appart。我想在整个应用程序范围内这样做。
我已经尝试了一个eventFilter,但它无法正常工作。存储的MouseButtonRelease事件不会发送到正确的对象。我通过installEventFilter(new MouseFilter(this))安装了这个;在一个小部件,但所有鼠标版本都会丢失。
您是否建议使用其他方法或我的代码有问题?
#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);
}
答案 0 :(得分:1)
你处在痛苦的世界里,去过那里。我向硬件人抱怨并无处可去。
一种方法可能是自己完成所有发布活动。基本上,当手指接触时,您会得到一个事件(即使它是静止的)。因此,基于该逻辑,您可以启动计时器,然后在100毫秒无触摸事件后,您将关闭鼠标释放。
QTimer的工作方式是你可以反复调用.start(),它会重新开始倒计时。
当然,这充满了问题,因为它依赖于100毫秒的幻数,它降低了应用程序的响应能力,并且只修复了应用程序中的错误,而不是系统范围内的错误。