首页 > 代码库 > QT5信号和槽机制(新手日记)
QT5信号和槽机制(新手日记)
信号和槽是 Qt 编程的一个重要部分。
槽和普通的 c++成员函数很像。它们可以是虚函数(virtual),也可被重载(overload),可
以是公有的(public ),保护的( protective ),也可是私有的( private ),它们可以象任何 c++成员函数一样被调用,可以传递任何类型的参数。不同在于一个槽函数能和一个信号相连接,只
要信号发出了,这个槽函数就会自动被调用。
connect 函数语法如下:
connect(Obeject1, SIGNAL(signal), Obeject2, SLOT(slot));
Object1 和 Obeject2 是 QObject 对象指针, signal 和 slot 是不带参数的函数原型。 SIGNALE()
和 SLOT()宏的作用是把他们转换成字符串。
信号与槽的连接方式:
1、一个信号可以和另一个信号相连
connect(Obeject1, SIGNAL(signal1),Obeject2, SIGNAL(signal1);
表示信号1发射可以触发信号2发射。
2、一个信号可以连接到多个槽:
connect(Obeject1, SIGNAL(signal2),Obeject2, SLOT(slot2);
connect(Obeject1, SIGNAL(signal2),Obeject3,SLOT(slot1);
当信号发出后,槽函数都会被调用,但是调用的顺序是随机的,不确定的。
3、多个信号可以连接到一个槽
connect(Obeject1, SIGNAL(signal2), Obeject2, SLOT(slot2);
connect(Obeject3, SIGNAL(signal2),Obeject2, SLOT(slot2);
任何一个信号发出,槽函数都会执行。
4、连接可以被删除
disconnect(Object1, SIGNAL(signal1),Obeject2, SLOT(slot);
这个函数很少使用,一个对象删除后,Qt 自动删除这个对象的所有连接。
信号和槽函数必须有着相同的参数类型,这样信号和槽函数才能成功连接:
connect(ftp, SIGNAL(rawCommandReply(int, const QString &)),this,SLOT(processReply(int,const QString &)));
如果信号里的参数个数多于槽函数的参数,多余的参数被忽略。
注意:Qt信号和槽机制不支持对模板的使用
QT5信号和槽机制(新手日记)