qt eventfilter event 给出例子
时间: 2023-07-05 08:14:36 浏览: 99
QT 事件过滤器实例
下面是一个简单的例子,演示如何在事件过滤器中处理鼠标单击事件:
```cpp
class MyEventFilter : public QObject
{
public:
MyEventFilter(QObject *parent = nullptr) : QObject(parent) {}
protected:
bool eventFilter(QObject *obj, QEvent *event) override
{
if (event->type() == QEvent::MouseButtonPress) {
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
if (mouseEvent->button() == Qt::LeftButton) {
qDebug() << "Left mouse button clicked!";
return true; // Event handled
}
}
// Pass the event on to the parent class
return QObject::eventFilter(obj, event);
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget window;
window.installEventFilter(new MyEventFilter(&window));
window.show();
return app.exec();
}
```
在这个例子中,我们创建了一个MyEventFilter类,继承自QObject,重载了eventFilter()函数。在eventFilter()函数中,我们检查事件的类型是否为QEvent::MouseButtonPress(鼠标单击事件),并且检查鼠标按钮是否为Qt::LeftButton(左键单击)。如果是,则输出一个调试信息,并返回true,表示该事件已被处理并且不会发送到目标对象的事件处理程序。
在main()函数中,我们创建了一个QWidget窗口,并将MyEventFilter安装到该窗口上。这样,当用户单击该窗口时,事件将首先发送到MyEventFilter,而不是窗口本身的事件处理程序。如果MyEventFilter处理了该事件,则返回true,否则该事件将发送到窗口的事件处理程序进行处理。
阅读全文