Qt从入门到放弃——信号和槽机制(Sigal&Slot)

标题信号和槽概念

Qt提供了信号和槽机制用于完成界面操作的响应,信号和槽机制是完成任意两个Qt对象之
间的通信机制
。其中,信号会在某个特定情况或动作下被触发,槽是等同于接收并处理信号的函数。

例如,窗口里面的一个按钮,你点下去,可以发送信息;或者你点下去,进入了另外的窗口;

每个Qt对象都包含若干个预定义的信号和若干个预定义的槽。

当某一个特定事件发生时,一个信号被发送,与信号相关联的槽则会响应信号并完成相应的处理。当一个类被继承时,该类的信号和槽也同时被继承,也可以根据需要自定义信号和槽。

槽函数也分为三种类型,即public slotsprivate slotsprotected slots

  • public slots:在这个区内声明的槽意味着任何对象都可将信号与之相连接。这对于组件编程非常有用,你可以创建彼此互不了解的对象,将它们的信号与槽进行连接以便信息能够正确的传递。
  • protected slots:在这个区内声明的槽意味着当前类及其子类可以将信号与之相连接。这适用于那些槽,它们是类实现的一部分,但是其界面接口却面向外部。
  • private slots:在这个区内声明的槽意味着只有类自己可以将信号与之相连接。这适用于联系非常紧密的类。

信号与槽机制的连接方式(signal&slot)

slot是槽、signal是信号

  1. 一个信号与一个信号相连(信号触发信号)
connect(Object1,SIGNAl(signal1),Obect2,SIGNAL(signal1));
意思是ObjectI的signal1发送可以触发 Object2的signa1发送
  1. 同一个信号可以与多个槽相连(信号与槽)
connect(Object1,SIGNAl(signal12),Obect2,SIGNAL(Slot2));
connect(Object1,SIGNAl(signal12),Obect3,SIGNAL(Slot1));
  1. 同一个槽可以响应多个信号
connect(Object1,SIGNAl(signal12),Obect2,SIGNAL(Slot2));
connect(Object3,SIGNAl(signal12),Obect2,SIGNAL(Slot2));
//下面的连接方式更为常见:
connect(Object1,SIGNAl(signal),Obect2,SLOT(slot));

SIGNAL0和 SOTO是Qt定义的两个宏,它们返回其参数的C语言风格的字符串( const char*)。因此,下面关联信号和槽的两个语句是等同的:

connect(button,SIGNAl(clicked()),this,SLOT(showArea()));
connect(button,"clicked()",this,"showArea()");

你可能感兴趣的:(QT系列,c++,qt5,接口)