信号和槽是QT自行定义的一种通信机制,它独立于标准的 C++ 语言,是标准C++的扩展。因此要正确的处理信号和槽,必须借助一个称为 moc(Meta Object Compiler)的QT工具,一般叫做元对象编辑器,该工具是一个C++ 预处理程序,它为高层次的事件处理自动生成所需要的附加代码。
1 初步认识信号
当某个信号对其客户或所有者发生的内部状态发生改变,信号被一个对象发射。例如QPushButton对象被鼠标点击后,发射出信号clicked()。
信号的声明是在头文件中进行的,QT 的 signals 关键字指出进入了信号声明区,随后即可声明信号,信号没有调用权限,不需要在申明的时候指定(public、protected、private)等权限。
信号只申明不实现
从形式上讲,信号的声明与普通的C++函数是一样的,但是信号却没有函数体定义,另外,信号的返回类型都是void,不要指望能从信号返回什么有用信息。
信号可以通过关键字emit来发射
emit clicked();
2 初步认识槽函数
槽函数可以像普通的 C++ 成员函数,可以被正常调用,与普通函数的不同之处是信号可以与槽函数相关联。当与其关联的信号被发射时,这个槽就会被调用。
槽函数与其它普通函数一样,它们也有存取权限。槽函数也分为三种类型,即 public slots、private slots 和 protected slots。
public slots:在这个区内声明的槽意味着任何对象都可将信号与之相连接。