使用windows API编程,离不开消息循环和事件处理,在这个里面存在一个回调函数和while循环,当window获取消息后,就通过while进行分发,进而在回调函数里得到处理,而qt又是怎么回事呢?
在QT中我们处理一个动作,比如说是鼠标打击或者双击,我们是通过信号,将这个操作认为是发了一个信号,而处理这个信号的称之为槽,但是这个信号是怎么产生的?其实这个信号就是在事件中发生的,也就是在触发一个事件的时候,事件的内部又进而产生一个信号,看下面的代码:
信号有了,谁来处理这个信号,刚才提到了是槽,我们知道在windows API中,那个回调函数就是干这个的,回调函数里面对消息类型进行判断,然后处理,而信号和槽是怎么联系起来的呢?看下图:
Qt信号和槽机制的优点:
a.类型安全的。 需要关联的信号和槽的签名必须是等同的,即信号的参数类型和参数个数同接受该信号的槽的参数类型和参数个数相同;不过,一个槽的参数个数是可以少于信号的参数个数的,但缺少的参数必须是信号参数的最后一个或几个参数。如果信号和槽的签名不符,编译器就会报错。
b.松散耦合的。Qt信号和槽机制减弱了Qt对象的耦合度。激发信号的Qt对象无须知道是对哪个对象的哪个槽需要接受他发出的信号,他只需要做的是在适当的时间发送适当的信号就可以了,而不需要知道也不关心它的信号有没有被接受到,更不需要知道是哪个对象的哪个槽接受到了信号;同样的,对象的槽也不知道是拿个信号关联到了自己。而一旦关联信号和槽,Qt就保证了适当的槽得到调用。即使关联的对象在运行时被删除,应用程序也不会出现崩溃。
注意: 一个类想要支持信号和槽,必须从QObject或QOject的子类继承。Qt信号和槽机制不支持对模板的使用。
添加新评论0 条评论