keypress.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_Hkeypress.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函数吗?我还必须显示一个连接与keyPressEvent功能和一个50毫秒的定时器,即使它没有收到任何按键。提前谢谢!
发布于 2022-11-09 11:36:09
如果您想在小部件/对话框/控件中实现keyPressEvent,可以重写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);希望它能帮到你。
https://stackoverflow.com/questions/74373573
复制相似问题