Qt 事件的产生与处理

Qt 事件的产生与处理

事件的类型

  • 键盘事件
  • 鼠标事件
  • 鼠标双击事件
  • 鼠标移动事件
  • 绘画paintEvent事件等

事件的产生

从程序的启动,进入QApplication::exec(),便进入了事件的循环。操作系统将产生的事件加入到消息队列中,Qt 的事件循环不断地从系统的消息队列中取出消息,将消息生成 Qevent 事件,然后将 Qevent 派送到相应的Qwidget 窗体中进行处理。QWidget 将接受到相应的消息放进 event 函数里进行处理。event 里是按事件类型进行分发处理的,例如KeyPressEvent()、mouseMoveEvent()等。

简化流程:

  • A. Qt 将事件送到 QWidget
  • B. QWidget 将事件送到 Qvent
  • C. QEvent 按事件类型进行分发
  • D. 在事件类型里发送信号
  • E. 相应对象的信号接受

事件的处理

(1)重写特定的消息事件

最常见的事件处理办法就是重写paintEvent()事件,实现样式的重绘等。

(2)重写 Event() 事件

要将某一事件处理在 系统之前,可以重写event 事件,将事件的处理写在系统处理之前。例如键盘事件,可将键盘事件的处理 拦截在 keyPressEvent() 之前。注意处理完事件一定要 return true,否否则Qwidget 默认事件没有处理,会将消息事件继续递归分发,直至被处理返回ture.

(3)安装过滤器过滤事件

首先要对对象例如QPushbutton 安装installEventFilter( const QOject *obj ), rn然后在 obj 的EventFliter 进行处理:

    bool eventFilter(QObject* obj, QEvent* evt)
  
{
      if( (obj == &m_edit) && (evt->type() == StringEvent::TYPE) )
      {
          return true;
      }

      return QWidget::eventFilter(obj, evt);
  }
posted @ 2022-03-09 00:30  小陈晨  阅读(188)  评论(0编辑  收藏  举报