QT事件机制理解

事件和信号

从硬件层来看: 事件就是一种中断,
中断的产生形式:
1.用户操控硬件所产生的中断。
2.由系统自身所产生的中断,比如说定时器。

这种中断由系统内核监控,由系统内核接收到中断并向CPU发出的执行请求就叫信号。所以说事件是信号产生的基础
当Cpu接收到请求信号之后,对这个中断进行的响应叫做事件响应
在操作系统中,用户操控硬件时的中断由操作系统所监控,比如,当用户点击了一下鼠标时,此时鼠标就产生了一个中断,操作系统监控到这个中断,向CPU发出响应的请求(即一种信号),CPU按照自己的时间片对这个响应请求进行响应并进入相应的函数对这个鼠标点击事件进行处理的过程,叫做响应。当CPU进入事件处理函数后就可执行对点击事件的各种软件层的逻辑包括再发出不同的信号。

事件与信号与槽机制

事件是信号槽中信号产生的基础,而不是信号槽,信号槽解决的是两个不相关的控件中的通信问题。
事件是解决本控件对来自系统中信号的响应问题,两者不是一个概念。只能说信号槽的信号产生是由事件产生的。

QT里的事件

main.cpp

创建了一个QApplication 对象a,调用exec()后,整个程序进入事件循环,由QApplication 对象a监控应用程序中所有控件所产生的事件

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

简要描述QT事件处理机制:由exec执行的事件循环监听整个应用程序中所有控件的事件,当某个控件产生相关事件之后,QApplication 对象
就会执行 notify 函数,向此控件发送通知,收到事件通知的控件通过 过滤 以及 分发函数,到达事件处理函数,整个过程为响应函数。

QT底层维护的 事件处理机制 路径

在这里插入图片描述
并且QT事件处理函数都是虚函数,可以重写功能。
常用事件处理函数:

  • 鼠标事件 QMouseEvent
  • 键盘事件 QKeyEvent
  • 重绘事件 QPaintEvent
  • 定时器事件 QTimeEvent
  • 拖拽事件 QDropEvent

再次区别事件机制、信号与槽机制

事件机制是针对于某一个控件,信号与槽机制针对两个不相关的控件
事件机制是CPU调度完成的,信号与槽机制是自动触发的,只要触发了信号,直接槽函数处理,不会等CPU

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值