QT事件和信号的区别

以window为例,Qt事件就是将windows底层的消息例如WM_KEYDOWN经过两三次转换为Qt::Key_Down的事件,按下键盘的Down会触发这个事件。

想了解信号与事件,最好看Qt的源码,以QPushButton为例,按下这个按钮是先触发的是mousePressEvent事件,在事件源码中会发射pressed()信号,松开按钮又触发mouseReleaseEvent事件,在事件源码中发射released()信号和clicked()信号。

事件对应的是信号产生的途径,例如按钮的按下松开。信号需要关注的是产生其的对象,例如按钮,槽函数需要找到信号对象,不会关心如何产生这个信号。

事件更底层,它是封装windows消息形成的,信号更偏上层一点。

总结:

qt中的事件其实就是封装的不同平台的事件。

信号,对于同步connect来说则是直接调用各槽函数,而异步connect则是分发一个事件,到各被链接的线程里,各线程里的eventloop收到事件再去执行对应的槽函数

おすすめ

転載: blog.csdn.net/weiyaonan/article/details/121868149