当前位置: 首页 > news >正文

化工行业网站智慧团建pc网页版

化工行业网站,智慧团建pc网页版,网站建设 备案什么意思,个人做流量大的网站上一节分析了qt和windows系统之间的消息的传递#xff0c;本节着重看一下#xff0c;qt内部的事件是如何传递的#xff1f; 1.sendEvent函数 在使用的自定义事件时#xff0c;有时需要手动抛出一个事件#xff0c;常用的方式有2种#xff0c;其一时阻塞式的sendEvent函…上一节分析了qt和windows系统之间的消息的传递本节着重看一下qt内部的事件是如何传递的 1.sendEvent函数 在使用的自定义事件时有时需要手动抛出一个事件常用的方式有2种其一时阻塞式的sendEvent函数其二是postEvent函数sendEvent函数定义如下 其主要是将spont设置为fasle然后转入到notifyInternal2函数中执行处理 其中self在QCoreApplicationPrivate构造函数中已被指定所以不为空if(!self selfRequired)不会执行 QInternal::activateCallbacks函数会检测是否注册了事件回调函数如果注册了对应的事件函数会截获此事件其对应的定义如下 由于在实践项目中没有用过此种方式此处略过 接下来会通过QScopedScopeLevelCounter类将接收对象的scopeLevel变量加1并在函数退出时减一此处猜测是qt标识循环层级使用的实际是做什么用的还不清楚 接下来会转入doNotifity函数处理notify函数最终也是转入doNotify函数中处理 此处会检测接收对象和发送对象是否在同一个线程并最终转入notify_helper函数中处理 此处会判断接收的对象是否在主线程中如果是在主线程中会检测QCoreApplication的对象是否安装了事件过滤器如果此事件被QCoreApplication事件过滤器检测到并被处理并不会向下传递 接下来会判断此接收对象上的事件过滤器是否处理此事件如果此事件被处理则退出 最后进入接收对象自己的event函数进行事件处理 通过上述流程可以发现1、event对象在事件传递过程中没有执行删除等释放动作其内存需要用户自己管理2、sendEvent函数一直在执行函数的调用并最终转到notify_helper函数中处理所以其是阻塞式调用3、事件的传递顺序先被QCoreApplication对象拦截接着被对象注册的事件过滤器拦截最后执行自己的event函数 2、postEvent函数 首先判断接收对象是否为空如果为空删除event对象并退出 判断接收对象的线程是否被释放如果接收对象所在的线程已被删除则删除event对象并退出 如果接收对象被移动到其他线程中再次检测新的线程是否被删除如果新的线程已被删除则删除event对象并退出 判断事件是否可以被压缩即删除已经在postEventList中重复的事件主要针对QTimerEvent事件、QDeferredDeleteEvent、QQuitEvent等事件 接下来执行 将QEvent对象放入QScopedPointer中将receiver、event对象拼装成QPostEvent对象并放入到QPostEventList中如果中间出现异常则event对象内存有QScopedPointer对象回收 QPostEventList是根据priority优先级进行排序执行的 接下来将event-posted置为truepostedEvents数量加1并将canWait设置为false 最后调用QAbstractEventDispatcher的wakeUp函数wakeUp函数会调用WinAPI的PostMessage函数投递一个WM_QT_SENDPOSTEDEVENTS事件其会被processEvent函数捡取到并最终转入QCoreApplicationPrivate中的sendPostedEvents函数处理具体可以参考上一节 首先判断receiver对象是否为空是否跨线程执行由于通过QAbstractEventDispatcher对象调用其receiver对象为空所以此处会跳过执行 将recursion加1防止递归调用并判断postEventList列表中是否有事件如果没有事件需要处理则退出 接下来主要是从QPostEventList中取出事件并调用QCoreApplication::sendEvent函数处理 并且会在此处删除event对象由QScopedPointer对象负责处理 另外qt在处理取事件的过程中非常小心考虑了很多异常情况 期间定义了CleanUp的类主要是用来处理事件对象被处理后清空事件列表中已经处理过的事件 总结 sendEvent函数 1、event对象在事件传递过程中没有执行删除等释放动作其内存需要用户自己管理 2、sendEvent函数一直在执行函数的调用并最终转到notify_helper函数中处理所以其是阻塞式调用 3、事件的传递顺序先被QCoreApplication对象拦截接着被对象注册的事件过滤器拦截最后执行自己的event函数 postEvnet函数 1、event对象会被保存在全局的postEventList列表中由事件在处理时被释放 2、postevent函数会将事件、receiver对象放到全局的QPostEventList列表中并通过WINAPI的postmessage系统函数通知QAbstractEventDispatcher类检索到最终转入到sendPostedEvents函数中处理 3、上一节已提到windows消息及qt自定义消息如何被检索的过程所以可以判断出postevent函数的处理是异步的过程 QCoreApplication类的主要内容已基本结束下一节会着重介绍下定时器事件
http://www.zqtcl.cn/news/273727/

相关文章:

  • 12306网站是是阿里巴巴做的吗专业建网站设计公司
  • 关于申请网站建设经费的请示网推推荐信
  • 网站建设请款报告网站服务器租用价格
  • 贵州建设网老网站手机网站建设运营方案
  • 网站方案范文唐山自助建站模板
  • 金华网站制作网站建设的功能需求
  • 用iis建立网站口碑营销案例分析
  • 注册网站要求线上设计师与线下设计师的区别
  • 个人备案 网站内容网站备案如何查询
  • 宿州科技网站建设百度网站外链发布平台
  • 织梦移动网站wordpress父文章显示不全
  • 游戏攻略网站怎么做网站开发需求确认书
  • 做高大上分析的网站电商到底干嘛的
  • 物流网站哪个好网络推广就找南昌莫非传媒
  • 查看网站空间企业网站管理系统介绍
  • 重庆市工程建设信息网新网站艺术品商城网站开发
  • 上海网站制作商wordpress改主题
  • 钰鸣厦门网站建设2023热点新闻事件
  • 网络营销的主要形式有建设网站免费搭建网站哪个好
  • 建一个网站需要哪些人aso是什么意思
  • 电商网站有哪些淘宝运营培训班哪里有
  • 网站开发网站制作太原优化排名推广
  • 佛山市网站开发桥西区建设局网站
  • 怎么制作网站应用云主机上传wordpress
  • flash网站代做马鞍山网站建设制作公司
  • 温州网站的优化wordpress 注册邮箱验证失败
  • php网站开发实例视频教程宁波seo运营推广平台排名
  • 网络营销网站开发设计公司网站推广营销
  • 2015年做那个网站致富wordpress最新模板
  • 做网站开发平台北京广告公司有哪些