Qt学习记录---(4)事件(event和eventfilter函数)

Qt中的事件,学完有一种挺重要的但是有一种实际开发中可能用不上的感觉。。还是记录下来把。。

1.Event函数

很多对象的操作都对应一个Event函数 ,主窗口也有event函数,用于对其子类事件信号分发(它们都是虚函数)。我理解为 event函数就是处于信号和槽之间的一层函数,他可以决定是否忽略信号(槽函数就接收不到),或者执行完一定的操作后继续传递信号(槽函数可以接收到)。
使用时先需要在h文件中声明,然后再定义。
(1)比如鼠标按下的Event函数:在这里插入图片描述
(2)主窗口的event函数:
在这里插入图片描述
(2)event函数信号的接受与忽略:
当我们对以上event函数进行定义时,如果不返回事件信号或者返回“true”的话,那么信号就不会继续传递导致其他槽函数接收不到。
如:
在这里插入图片描述
在这里插入图片描述

注意使用主窗口把event信号传给其子类时,需要进行强制类型转换!
例如:在这里插入图片描述
ev本来是QEvent的对象,这里强制转化为QMouseEvent。

2.EventFilter函数

我理解的是 他是与event的上一层,属于信号和event的中间一层,一般适用于每个主窗口。
画一张图来表示:
在这里插入图片描述
作为初学者,我感觉其功能与Event函数差不太多。

同样的,如果定义了它,也需要是否决定是否继续传递信号。
继续传递使用
在这里插入图片描述

下面是一个简单的例子,演示如何在事件过滤器中处理鼠标单击事件: ```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,否则该事件将发送到窗口的事件处理程序进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值