Qt 中的去抖动事件过滤器
Debounce event filter in Qt
这是我关于Qt的第一个问题(通常互联网和文档对我有很大帮助(
我已经在我的应用程序上安装了一个事件过滤器(在 main.cpp(,我希望这个事件过滤器检查按下的键,然后将其重新分发到较低的功能(例如在 QGraphicsScene 上移动项目(,
这是有效的,但是,5次。 过滤器中的 qDebug(( 显示该键在只有一次时被按下了 5 次。
事件过滤器非常快,可以捕获 5 次。 找不到去反弹的方法。
以下是代码中有趣的部分:
主.cpp
#include "mainwindow.h"
#include "eventfilter.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
xEventFilter *filter = new xEventFilter(&a);
a.installEventFilter(filter);
xMainWindow w;
w.show();
return a.exec();
}
事件过滤器.h
#ifndef EVENTFILTER_H
#define EVENTFILTER_H
#include <QObject>
class xEventFilter : public QObject
{
Q_OBJECT
public:
explicit xEventFilter(QObject *parent = nullptr);
protected:
bool eventFilter(QObject *obj, QEvent *event) override;
};
#endif // EVENTFILTER_H
事件过滤器.cpp
#include "eventfilter.h"
#include "editor.h"
#include <QKeyEvent>
#include <QDebug>
extern xEditor *editor;
xEventFilter::xEventFilter(QObject *parent) :
QObject(parent)
{ }
bool xEventFilter::eventFilter(QObject *obj, QEvent *event)
{
qDebug() << "Enter filter";
if (event->type() != QEvent::KeyPress)
return QObject::eventFilter(obj, event);
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
qDebug() << keyEvent->text();
switch(keyEvent->key()) {
case Qt::Key_Z: { editor->selection->moveSelection(keyEvent); }
case Qt::Key_S: { editor->selection->moveSelection(keyEvent); }
case Qt::Key_Q: { editor->selection->moveSelection(keyEvent); }
case Qt::Key_D: { editor->selection->moveSelection(keyEvent); }
case Qt::Key_Space: { }
}
return false;
}
仰望您的答案;)
主要问题是,即使您处理事件,也会返回 false。根据文档,如果您希望停止处理事件,则应返回 true。
在重新实现此函数时,如果要过滤 事件输出,即停止进一步处理它,返回 true;否则 返回假。
此外,在 switch 语句的情况下,您缺少break
。
相关文章:
- Android NDK传感器向事件队列报告奇怪的间隔
- 带过滤器的现代迭代c++集合
- 从文本文件中读取时钟时间和事件时间并进行处理
- WMI检测进程创建事件-c++
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 处理闪烁窗口事件
- 在事件过滤器之前发出对象的事件
- Qt:事件过滤器在显示 QCompleter 时不接收按键
- Qt 中的去抖动事件过滤器
- QT 事件过滤器 mouseEvent->pos().x() 始终为零,但 mouseEvent->pos().y() 工作正常
- 按键事件过滤器出现问题
- 为 QAbstractScrollArea 安装事件过滤器
- QwidgetWindow作为QT5的事件过滤器中的QObject
- Qt 事件过滤器未检测到对象名称
- 如何在事件过滤器中相互更改Left_Key和Right_Key事件
- Qt、多重继承、包装器或事件过滤器
- QComboBox事件过滤器弹出
- 在QScrollArea视图上安装事件过滤器
- 是否有一种方法来卸载事件过滤器在qt
- QML 中的事件过滤器