QT信号与槽的使用

来源:互联网 发布:怎么做好网页设计知乎 编辑:程序博客网 时间:2024/06/03 23:44

  QT是个很好的图形库,并且QTCreater编辑器非常好用,感觉是用过最好的了,刚开始学,先就拿来主义把,先不管怎么实现,先用上了再说。
  信号与槽主要是用于两个对象之间的通讯而设计的,有了它可以很方便的建立两个不同类型或是不同级别对象的通讯。

  信号与槽机制的连接方式
1、一个信号与一个槽相连
connect(Object1,SIGNAL(signal),Object2,SLOT(slot));
其中,signal为对象Objetc1的信号;slot为对象Object2的槽。
比如定义一个button的信号/槽机制:connect(button_name,SIGNAL(clicked()),this,SLOT(functions_name(arguments)));
也可写成:connect(button_name,“clicked()”,this,“functions_name(arguments)”);

2、一个信号与另一个信号相连
connect(Object1,SIGNAL(signal1),Object2,SIGNAL(signal2));
表示Object1的信号1发射可以触发Object2的信号2发射。

3、同一个信号与多个槽相连
connect(Objector1,SIGNAL(signal1),Objector2,SLOT(slot1));
connect(Objector1,SIGNAL(signal1),Objector3,SLOT(slot2));

4、同一个槽可以响应多个信号
connect(Objector1,SIGNAL(signal1),Objector2,SLOT(slot1));
connect(Objector2,SIGNAL(signal1),Objector2,SLOT(slot1));

信号与槽机制的优点
(1)类型安全
信号的参数类型和参数个数同接收该信号的槽的参数类型和参数个数相同。不过,一个槽的参数个数可以少于信号的参数个数,但缺少的参数必须是信号参数的最后一个或几个参数。
(2)松散耦合
信号和槽机制减弱了Qt对象的耦合度。激发信号的Qt对象无须知道是哪个对象的那个槽需要接收它发出的信号,只需要做的是在适当的时间发送适当的信号就可以了,而不需要知道也不需要关心它的信号有没有被接收到。

注:一个类若要支持信号和槽,就必须从QObject或QObject的子类继承,Qt信号和槽机制不支持对模板的使用。

信号与槽机制的效率
信号和槽机制增强了对象间的通信的灵活性,然后也损失了一些性能。同回调函数相比,信号与槽机制运行速度有些慢。

原创粉丝点击