浅谈QT父子Widget之间消息传递机制

移动开发
QT 父子Widget之间消息传递机制是本文要介绍的内容,主要是来了解并学习QT Widget应用中消息传递的机制,具体内容的实现来看本文详解。

QT 父子Widget之间消息传递机制是本文要介绍的内容,主要是来了解并学习QT Widget应用中消息传递的机制,具体内容的实现来看本文详解。

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

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

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

事实也确实如此:

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

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

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

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

小结:

QT 父子Widget之间消息传递机制的内容介绍完了,希望通过QT Widget应用内容的学习能对你有所帮助。

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-09-07 16:36:00

Qt Widget

2011-09-09 17:59:26

QT Widget

2014-03-04 15:28:32

iOS开发消息传递机制

2011-09-08 17:48:33

Web Widget

2011-06-24 10:05:51

QT 对象 父对象

2011-09-07 16:24:10

Qt Widget

2022-11-14 09:13:16

2011-09-07 16:28:46

QT WidgetQWidget

2011-06-28 15:37:34

Qt 内存

2011-06-21 16:51:21

Qt 静态 编译

2011-06-20 16:38:33

Qt QWidget Qt4.5

2010-08-02 16:59:54

2011-07-05 10:22:44

Qt Sqlite

2011-05-31 11:55:00

Android 消息机制

2011-07-04 15:30:24

Qt 布局 GridLayout

2011-07-01 15:04:49

Qt 内省

2009-09-04 11:00:13

通过C#引用传递

2009-07-16 09:46:20

iBATIS Log机

2011-03-10 15:22:08

访问控制机制Java

2011-06-13 10:03:19

Qt 多线程 编程
点赞
收藏

51CTO技术栈公众号