Qt并不是一定要用来做界面开发,其实Qt内部的很多非界面模块也十分优秀,本文紧接着上一篇文章,继续介绍使用QObject做基类来开发模块。
信号与槽(Signals and slots)
信号驱动是面向对象编程的精髓,对象与对象之间通过各种信号来传递信息,大部分的面向对象开发的信号驱动都是通过回调函数方式串联在一起。而Qt下实现信号驱动的机制是其信号与槽(Signals and slots)体系。
要实现信号和槽之间的关联,需要三个部分:1-信号函数构造;2-槽函数构造;3-信号和槽关联。信号就像广播一样,可以在对象内,对象间四处传播;只有接口匹配的槽函数才能接受信号。那么如何确定某个信号被某个槽函数(或者某几个槽函数)接受呢? 这就需要建立信号与槽之间的关联关系。
信号驱动是面向对象编程的必不可少的技术。比如新建了4个任务,收到开始指令后,需要将这四个任务分配到四个CPU中并行计算。 此时如果使用传统的函数驱动编程方式,应该很难实现。 那么如果事先把四个任务分配到四个CPU,再发出一个信号,四个CPU中的任务收到信号后,同时并行开始就会十分轻松。
不再空拽理论,紧接着上一次的项目继续,我们还是结合实操来看。上次的代码已经定义了一个信号。如下图: