qt中sendevent_Qt中postEvent和sendEvent函数

本文介绍了Qt中的postEvent和sendEvent函数。postEvent将事件添加到事件队列,等待处理,而sendEvent则直接发送事件并等待处理结果。sendEvent通过QCoreApplication::notifyInternal调用目标对象的event函数,postEvent则将事件添加到postEventList中,由事件循环处理。调试时,可以通过重载事件处理函数并设置断点观察调用过程。
摘要由CSDN通过智能技术生成

Qt中postEvent和sendEvent函数

部分内容参考http://blog.csdn.net/lvmengzou/article/details/65450908

qt事件循环需要维护一个事件队列,在Qt的main函数中最后一般调用QApplication::exec()成员函数来保持程序对事件队列的处理,exec()的实质是不停调用processEvent()函数从队列中获取事件,并处理,然后删除,postEvent的作用就是发送一个事件到此队列中,由于删除队列中事件调用delete运算符,所以,postEvent()传递的事件一定要是动态分配的。

sendEvent()函数直接跳过事件循环队列,直接调用notify()函数发送事件到目标对象,并等待事件处理结果,所以其传递的事件直接在栈上分配即可,(postEvent()函数只负责添加事件到队列,不等待事件处理结果)。

sendEvent调用关系如下:

inline bool QCoreApplication::sendEvent(QObject *receiver, QEvent *event)

{ if (event) event->spont = false; return self ? self->notifyInternal(receiver, event) : false; }

QCoreApplication::notifyInternal(QObject * receiver, QEvent * event)

QCoreApplication::notify(QObject * receiver, QEvent *event)

QCoreApplicationPrivate::notify_helper(QObject * receiver, QE

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值