Qt中的信号和槽是一种强大的机制,用于处理对象之间的通信。它们是Qt框架中实现事件驱动编程的核心部分。
信号(Signal):信号是当某个特定事件发生时由一个对象发出的。信号本质上就是一个函数调用,但不同于普通的函数调用,它拥有一些特殊属性。比如信号可以异步发送,也就是说发送者和接收者可以在不同的线程中运行。此外,信号可以带有参数,这些参数可以在信号发送时被传递给接收者。
槽(Slot):槽是接收并响应信号的函数。槽函数可以是任何普通的成员函数,只要它被声明为信号的接收者。当一个信号被发射时,与之相关联的槽函数将被自动调用。
在Qt中,要建立信号和槽的连接,需要使用connect
函数。例如:
connect(sender, SIGNAL(signalName()), receiver, SLOT(slotName()));
这里,sender
是信号的发送者,signalName()
是信号的名称,receiver
是接收者对象,slotName()
是槽函数的名称。
举个例子,铃声响起,老师说放学,然后学生就回家。这里老师说放学为信号,学生为槽接受然后做出回家的动作。
先在头文件里面添加老师和学生两个类
选择第一个同时创建.h和.cpp文件
结果如下图所示
对信号的添加要写在signals下面,只需要声明,不需要实现,返回void,可以带参数和重载。所以不用在cpp文件内进行处理
对槽函数的添加要写在public下面或者全局函数,需要声明和实现,返回void,可以带参数和重载。
把teache和student的头文件引入进来
至此,就完成了一个简单的例子。运行,然后在应用程序输出可以看到文字输出