【QT】QT的学习:信号跟槽

  信号signals跟槽slots是QT的专有机制,跟c++中的public、private、protected一样用于说明信号跟槽函数。

  当信号对其客户或者所有者发生的内部状态发生改动,信号被一个对象发射。槽是用来接收发射的信号的,当信号被发送之后,槽会被一个一个的执行,没有顺序随机的。信号一般是由定义过这个信号的类或者派生类来发送。

  QT的signals关键字已经指出了进入信号的声明区域,signals的区域内的函数必须是void类型的,并且不能加public、private、protected进行修饰;槽函数就是基本的普通函数。可以加上public、private、protected进行修饰。

  信号跟槽的关联一般是通过connect进行关联。connect的函数声明为:

 bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * member )

  作用是:将发射者的信号函数跟接收对象的槽函数关联起来。如果想要去关联函数则使用:

  bool QObject::disconnect ( const QObject * sender, const char * signal, const Object * receiver, const char * member )

  注意:

  1.宏定义以及函数指针不能用于信号跟槽的参数,信号跟槽也不能有缺省参数。

  2.在使用connect的时候要保证信号的参数要大于槽的参数的数量。

 3. 构造函数不能在signals以及slots中声明。

4.只有集成了QObject的类才能使用信号跟槽,因此如果想要在勒种定义声明信号跟槽,那这个类就必须继承QObject类。例如:class A : public QObject,凡是QObject的类必须在类的开始写上Q_OBJECT,不管这个类是不是使用信号槽,只要这个类是继承了QObject,就必须加上宏Q_OBJECT

5.使用信号signals来标记信号函数,信号函数在类是void类型的,是一个函数声明,不需要自己实现,这都是由QT自己实现的。


推荐一个自己感觉比较好的学习博客:

http://blog.csdn.net/louis_815/article/details/54286544


  


猜你喜欢

转载自blog.csdn.net/ipfpm/article/details/77599988