Qt事件分发

最近在想Qt事件产生后,放入到系统的事件队列中,等待事件分发器向外分发,

但是Qt是如何得知该事件要分发给谁呢?

下面是网友的一些回答:

一个事件发生之后,Qt怎么知道该发给哪个QObject的event()函数呢?

我看了一下文档里关于QApplication::sendEvent()函数的说明,

一个sendEvent()函数只能连接一对event-receiver。

所以Qt是会自动把事件发送给所有的QObject(包括自定义的)吗?


个人认为会进行广播,也就是发送给所有 QObject,

只不过有的对象会进行处理,有的对象直接忽略。

至于 sendEvent() 函数,你当然可以通过两次调用来发送给两个对象的


thx,感谢豆子君的回复~btw,

说得更细点可能是QCoreApplication类先发送给每个Object树的顶层?

(因为子组件ignore后会自动发送给父组件)



感觉应该是可以这样理解的


keypress event应该是发给当前焦点的object,

如果不处理为false,再由object向父object传递,处理就为true 停止传递。


因为Qt所有的对象都继承自QObject,那么是不是在这个QObject中关联了事件需要发到哪个消息队列上呢?

还是定义成全局的或者是静态的啦?一个进程有一个系统消息队列。

对象在创建的时候,是不是都被添加了一个树状的结构中,

这样分发消息的时候,Dispatcher从这个树的顶部开始依次向下调用每个QObject对象的event()函数。

先向父亲为0的对象进行分发,对象在收发后,同时分发给他的孩子,(即依次调用所有孩子的event()函数)。

因为GUI是单进程单线程的,所以这样的遍历调用是同步阻塞式的,只要其中有一个返回true,

则表示该事件被处理了,Dispatcher就无需再分发了,可以直接从消息队列中删除了。

以后只是俺个人的理解,因为没有做过GUI这种宏大的事件编程机制,很多东东需要猜测的。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值