使用事件过滤器可以监控指定控件的事件,例如鼠标点击、键盘按下等操作。以下是一个简单的示例,演示如何对某个 QLineEdit
控件使用事件过滤器。
#include <QtWidgets>
class EventFilter : public QObject
{
public:
EventFilter(QObject *parent = nullptr) : QObject(parent) {}
protected:
bool eventFilter(QObject *obj, QEvent *event) override
{
if (obj->objectName() == "lineEdit" && event->type() == QEvent::KeyPress)
{
QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
qDebug() << "Key Pressed: " << keyEvent->key();
}
return false;
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 创建一个 QLineEdit 控件
QLineEdit lineEdit;
lineEdit.setObjectName("lineEdit");
lineEdit.show();
// 创建事件过滤器对象,并安装到 QLineEdit 控件上
EventFilter eventFilter;
lineEdit.installEventFilter(&eventFilter);
return a.exec();
}
在这个示例中,我们创建了一个名为 EventFilter
的类,继承自 QObject
。重写了 eventFilter()
函数,当监测到指定控件(这里是 lineEdit
)的键盘按下事件时,在终端输出当前按下的键值。最后在主函数中创建 QLineEdit
对象,并将该对象安装事件过滤器。
需要注意的是,在调用 installEventFilter()
函数时传入的参数应该是一个指向 QObject
的指针。在这个示例中,我们使用了 EventFilter
类的实例,因为它已经继承自 QObject
。