[记录]学习<<QT学习之路2>>第四天

来源:互联网 发布:知无涯者书 编辑:程序博客网 时间:2024/05/21 22:34

今天学习内容对应<<QT学习之路2>>第18到23部分,主要是有关于QT事件这一部分的内容(=_=真是看到我快吐了,感觉这本书不适合我这种初学者).

先放出思维导图


难点总结

一,什么是事件,它和信号槽有什么异同的?

事件的具体定义我也讲不清=_=,按照豆子先生的说法,事件(event)是由系统或者 Qt 本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件。事件可以是同步的,也可以是异步的(什么是同步?什么是异步?)而槽只能是同步的

二,事件的分类,怎么自己自定义事件?

QT提供了许多的预定义事件.QT采取的是一个事件对应一个事件函数.共有五个事件处理优先机制.分别为:

  1. 重写paintEvent()mousePressEvent()等事件处理函数。这是最普通、最简单的形式,同时功能也最简单。
  2. 重写event()函数。event()函数是所有对象的事件入口,QObjectQWidget中的实现,默认是把事件传递给特定的事件处理函数。
  3. 在特定对象上面安装事件过滤器。该过滤器仅过滤该对象接收到的事件。
  4. QCoreApplication::instance()上面安装事件过滤器。该过滤器将过滤所有对象的所有事件,因此和notify()函数一样强大,但是它更灵活,因为可以安装多个过滤器。全局的事件过滤器可以看到 disabled 组件上面发出的鼠标事件。全局过滤器有一个问题:只能用在主线程。
  5. 重写QCoreApplication::notify()函数。这是最强大的,和全局事件过滤器一样提供完全控制,并且不受线程的限制。但是全局范围内只能有一个被使用(因为QCoreApplication是单例的)。

另外我们也可以自定义自己所需要的事件.实现方法是继承QEvent()函数,来实现自定义事件和事件的发送.

三,事件什么时候会被接受,什么时候会被忽略?

事件的传播机制是否和信号类似?(=__=我也母鸡...)

按豆子先生写的, Qt 的事件传递看成链状:如果子类没有处理这个事件,就会继续向其父类传递.

注意一个,当重写事件回调函数时,时刻注意是否需要通过调用父类的同名函数来确保原有实现仍能进行!

什么意思呢?我也没看懂...

所以感觉这里基本是在写一些废话...算了,写上不懂的问题,免得忘记了.

另:什么时候选择事件?如果事件被处理了,那它还会传播吗?

   怎么样让某个特定组件收不到事件?-->事件过滤器

   要怎么样实现事件的忽略或者屏蔽?

四,事件过滤器是怎么样工作的?有多少类事件过滤器?

事件过滤器和目标对象要在同一线程时,事件过滤器才能工作(那么问题来了,什么是线程?)

事件过滤器的调用时间是在目标对象收到这个事件之前.这是由事件过滤器是否要向目的对象传递这个事件,从而起到了一个过滤的作用.

事件过滤器有很多种,这取决于编程人员的选择.甚至我们还可以给整个应用程序添加事件过滤器


ok!基本内容就写到这里了.

吐槽一下,这本书根本就适合初学者,不过我又不想换书.就先看看吧,熟悉一下概念.等到看不下去了再去找本简单来看.

嗯,加油^_^


0 0
原创粉丝点击