实现了一个QKeyEvent,但是如何调用keyPressEvent()



按键.h

#ifndef KEYPRESS_H
#define KEYPRESS_H
#include <QObject>
#include <QKeyEvent>
class keypress : public QObject {
Q_OBJECT public:
explicit keypress(QObject *parent = nullptr);
void keyPressEvent(QKeyEvent *e);
};
#endif // KEYPRESS_H

按键.cpp

#include "keypress.h"
#include <QDebug>
keypress::keypress(QObject *parent)
: QObject{parent}
{
}
void keypress::keyPressEvent(QKeyEvent *e)
{
qDebug() <<"Key clicked : "<<e->key();
}

我是QKeyEvent的新手,无法调用keyPressEvent功能。我应该在构造函数中调用keyPressEvent函数吗?我还必须显示connect with keyPressEvent功能和50毫秒的计时器,即使它没有收到任何按键。提前感谢!

如果您想在小部件/对话框/控件中实现keyPressEvent,您可以覆盖keyPressEvent

这是另一个链接:

  • QWidget keyPressEvent覆盖

如果你想自己实现按键并安装在其他widgets上,你可以参考下面的代码,

来自QObject::installEventFilter,

class KeyPressEater : public QObject
{
Q_OBJECT
...
protected:
bool eventFilter(QObject *obj, QEvent *event) override;
};
bool KeyPressEater::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
qDebug("Ate key press %d", keyEvent->key());
return true;
} else {
// standard event processing
return QObject::eventFilter(obj, event);
}
}

以下是如何在两个小部件上安装它:

KeyPressEater *keyPressEater = new KeyPressEater(this);
QPushButton *pushButton = new QPushButton(this);
QListView *listView = new QListView(this);
pushButton->installEventFilter(keyPressEater);
listView->installEventFilter(keyPressEater);

希望它能帮助你。

最新更新