浅议Qt的事件处理机制 二

8 篇文章 2 订阅

 

我们在上文中,介绍了Qt框架的事件处理机制:事件的产生、分发、接受和处理,并以视窗系统鼠标点击QWidget为例,对代码进行了剖析,向大家分析了Qt框架如何通过Event Loop处理进入处理消息队列循环,如何一步一步委派给平台相关的函数获取、打包用户输入事件交给视窗系统处理,函数调用栈如下:

  1. main(int, char **)
  2. QApplication::exec()
  3. QCoreApplication::exec()
  4. QEventLoop::exec(ProcessEventsFlags )
  5. QEventLoop::processEvents(ProcessEventsFlags )
  6. QEventDispatcherWin32::processEvents(QEventLoop::ProcessEventsFlags)

 

本文将介绍Qt app在视窗系统回调后,事件又是怎么一步步通过QApplication分发给最终事件的接受和处理者QWidget::event, (QWidget继承Object,重载其虚函数event),以下所有的讨论都将嵌入在源码之中。

  1. QT_WIN_CALLBACK QtWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) bool QETWidget::translateMouseEvent(const MSG &msg)
  2. bool QApplicationPrivate::sendMouseEvent(...)
  3. inline bool QCoreApplication::sendSpontaneousEvent(QObject *receiver, QEvent *event)
  4. bool QCoreApplication::notifyInternal(QObject *receiver, QEvent *event)
  5. bool QApplication::notify(QObject *receiver, QEvent *e)
  6. bool QApplicationPrivate::notify_helper(QObject *receiver, QEvent * e)
  7. bool QWidget::event(QEvent *event)

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值