下面是一个简单的Qt C++事件过滤器代码示例:
#include <QObject>
#include <QEvent>
#include <QDebug>
class EventFilter : public QObject
{
Q_OBJECT
public:
explicit EventFilter(QObject* parent = nullptr) : QObject(parent) {}
protected:
bool eventFilter(QObject* obj, QEvent* event) override
{
if (event->type() == QEvent::MouseButtonPress) {
qDebug() << "Mouse button pressed!";
return true; // 过滤该事件,不传递给目标对象
}
// 其他类型的事件交给目标对象处理
return QObject::eventFilter(obj, event);
}
};
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QPushButton button("Click me");
button.installEventFilter(new EventFilter(&button));
button.show();
return app.exec();
}
在上面的示例中,我们创建了一个EventFilter
类继承自QObject
,重写了eventFilter()
函数来实现事件过滤器。在这个例子中,我们只关心鼠标按钮按下事件(QEvent::MouseButtonPress
),当该事件发生时,会打印一条消息并返回true
来过滤该事件。
然后,在主函数中创建了一个QPushButton,并将之前定义的事件过滤器安装到该按钮上,通过调用installEventFilter()
函数来实现。最后显示应用程序并运行。
当你点击按钮时,会触发鼠标按钮按下事件,并且由于我们的事件过滤器对该事件进行了处理,所以不会将事件传递给按钮对象。
内容由零声教学AI助手提供,问题来源于学员提问