以前我一直以为:在父widget上摆一个子widget后,当click子widget时:只会进入到子widget的相关事件处理函数中,比如进入到mousePressEvent()中, 而不会进入到父widget的对应事件处理函数中。毕竟:click的是子widget,其遮挡住了父widget,从而父widget接收不到这个事件。然而事实真的是这个样子吗?

我做了一个测试: 在一个QWidget上建了一个QLabel。而后实现父QWidget的mousePressEvent(), 然后跟一下发现:当我click这个label时:居然能进入到父QWidget的mousePressEvent()中!但是如果把子改成QPushButton则进入不了!

咨询了一下别人,得到的答案是:如果子widget没有accept或ignore该事件,则该事件会被传递给其父窗口。

事实也确实如此:

    ①对于QLabel: 如果不重写mouse处理函数,也没有设置事件过滤器等操作的话,则相当于:其对mouse这个事件一直没有进行处理,那没有进行处理的话,相当于上边所说的情况,此时该事件会被传递给其parent。

    ②而对于QPushButton而言:当click它时:其会发射clicked()信号,其实这就相当于它对该事件的一个operator过程。所以:这里它accept该事件并进行了对应处理。从而:无法传递给其父窗口。

那么:对于一个继承而来的类,只要我们重写实现了其各个事件处理函数,则对应的事件肯定无法传递给其父widget!  哪怕重写的该事件处理函数的函数体为空!

如果是标准的控件对象,则其肯定没重写各个事件处理函数。那消息能不能传递到父widget中,则取决于中途有没有使用事件过滤器等将该信号拦截下来了。

最新文章

  1. 进新公司用cornerstone-checkout后遇到的奇葩bug,及解决方法
  2. mysql5.7 代价模型浅析
  3. LazyCode 自己开源的一个类库
  4. 关于Thread.IsBackground属性的理解(转载)
  5. 对于返回void类型的asyc的异步方法,如何修改,能使用await
  6. 华为HG8240光猫-破解-联通-2016-telnet-http
  7. ejabberd中的http反向推送
  8. android中GridView关于间距的属性值介绍
  9. 2015长春 HDU 5531 Rebuild
  10. Android开发心得(转)
  11. Why String is immutable in Java ?--reference
  12. VS快捷编码方式
  13. WPF对于xml的简单操作(上)
  14. ThinkPHP使用技巧经验总结
  15. IE6常见CSS解析Bug及hack
  16. ORA-01207: file is more recent than control file - old control file的处理方法
  17. Dynamics CRM2016 业务流程之Task Flow(一)
  18. spring注解关键字
  19. Javascript 获取文档元素
  20. 【题解】P1171 售货员的难题

热门文章

  1. 20155322 2016-2017-2 《Java面向对象程序设计》第十二周课堂练习之Arrays和String单元测试
  2. zedboard学习(1)OLED驱动显示图像
  3. macOS 10.14 Mojave Apache设置:多个PHP版本
  4. 关于Python的装饰器(2)
  5. stl源码分析之list
  6. maven 手动安装jar包
  7. 书写可维护的javascript
  8. Selenium2+python自动化-iframe
  9. CF刷题-Codeforces Round #481-D. Almost Arithmetic Progression
  10. idea 模版之自定义类与方法注释