今天第一次接触了Qt编程,呵呵,比MFC编程好用多了,之前也自学过java,感觉界面编程这一块和java的思想很像,不过到底是谁像谁我就不知道了,第一次接触了Qt编程中的精华:信号和槽。最强大的是,这种类似于MFC中MESSAGE_MAP的方式不仅可以用来做界面编程中按钮啊,文本框这种控件的响应,就是普通的类如果有必要的话,也是可以使用信号和槽机制的。好了,下面总结下信号和槽机制的一点知识。
槽和普通的C++成员函数一样,可以是虚函数,可以被重载,可以是公有的,可以是保护的或者私有的,并且也可以被其他C++成员函数直接调用,唯一不同的就是槽可以和信号关联起来,这样,每当发射这个信号的时候,就会自动调用这个槽了。将信号和槽连接起来的函数是:
QObject::connect(sender,SIGNAL(signal),receiver,SLOT(slot));
其中sender和receiver都是指向QObject类型(当然也可以是子类)的指针,而signal和slot是函数名。
信号和槽连接的时候分如下几种情况:
1.一个信号只和一个槽连接,这是最常见的情况。
2.一个信号连接多个槽。
此时即receiver或者slot函数不同,当发射这个信号的时候,会以不确定的顺序一个接一个的调用这些槽。
3.多个槽连接一个信号。
此时即sender或者signal函数不同,无论发射哪个信号,都会调用这个槽
4.一个信号可以与另外一个信号相连接
connect(sender,SIGNAL(signal1),recevier,SIGNAL(siganl2));
当发射第一个信号时,也会发射第二个信号。除此之外,信号与信号之间的连接和信号与槽之间的连接是难以区分的。
要想成功连接信号和槽,需要注意的地方有:
信号和槽的函数的参数必须具有相同的顺序和相同的类型,但是如果信号的参数比槽的参数多,多余的参数将会被简单的忽略。