Qt事件专栏

  • 事件用起来比信号槽要简单

  • 事件处理的流程:当有一个事件如鼠标双击事件被触发,则会在return app.exec();中监测到,它会把事件转换成一个对象,将对象传递给event()函数,这个函数不会立即处理,而是给了事件处理器(类似于swatch(事件对象a),从而调用响应的事件处理函数)。

  • 如果一个控件需要接收鼠标点击事件或者其他事件,那么就必须重写一个类,继承某种控件,并在ui界面中将控件提升为该类,然后在类的.cpp文件中重写事件处理函数

  • 所有的事件处理函数全部都是虚函数,需要重新实现(返回值,函数名,函数参数都不能改变),如果改变了就成了自己定义的函数而不是虚函数了。另外,事件处理函数都是保护类型的,最好有protected,虽然写public也不会报错。

在这里插入图片描述

  • QMouseEvent主要代表着鼠标事件的一些具体属性,如双击,按下,抬起,移动,xy坐标等,

  • 当获取到坐标时,坐标是一个int类型,如需要转换到str类型,则可以按照如下方式进行格式化。

在这里插入图片描述

  • 如果鼠标左键按下或者右键按下都可以在任何一个函数下进行判断:

在这里插入图片描述

  • 对于鼠标事件,要想一进来就有效,则要在控件的构造函数中做设定。(该控件是自定义控件)

在这里插入图片描述

  • 一个东西,你传给我,我如果接收了,就不会再向下传递了,如果我不接收,就会继续向下传递,如果一个控件继承了QPushButton,那么事件能继续向下传递的语句如下:

在这里插入图片描述

  • 每一个窗口都有一个event()函数,每一个控件也都有event函数,主要工作是事件的分发,如果要让某种事件不起作用,则可以直接重载event()函数。事件过滤器bool eventFilter(QObject *watched,QEvent *event)在event函数执行之前,*watched代表要过滤哪一个控件,*event代表要过滤哪一个事件。有事件过滤器后,就不需要重载event了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在主窗口重载事件过滤器时,对需要过滤要进行安装过滤器操作,下图是具体的操作步骤
在这里插入图片描述

  • 事件过滤器和被安装过滤器的组件必须在同一线程,否则过滤器将不起作用。

猜你喜欢

转载自blog.csdn.net/qq_42308217/article/details/113458831