Qt工程师常见面试题-信号与槽函

信号与槽函

1.Qt的信号与槽是什么

  • 信号和槽是Qt特有的信息传输机制,它可以让互不干扰的对象建立一种联系。它使用连接(connect)函数,绑定信号与槽,(connect)函数包括四个参数:发送者发送者发送的信号接受者接受执行的槽函数。意思是,将想要处理的信号和自己的一个 函数(称为槽(slot) 绑定来处理这个信号。也就是说,当有对象发出某个信号时,连接这个信号的槽函数会自动被回调。这种信号发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,这个对象就会执行他自身的绑定这个信号的槽函数。
  • 比如,使用connect函数绑定一个登陆按钮的点击信号(signal)和登陆界面的跳转的动作(slot),当这个登陆按钮检测到自己被点击了一下,它就会发出一个clicked信号。登陆界面收到登陆按钮的clicked信号,就会实现界面跳转的动作。

2.什么是Qt 的moc工具

  • moc(Meta-Object-Compiler)是Qt 的元对象编译器,从概念上和其他编译器一样来理解就好了。signals、slots关键字并不是标准C++里面的东西,代码最后要交给C++编译器,那么就需要把这部分转化成C++编译器认识的东西,这个工作就是moc来完成了。
  • Q_OBJECT定义了一堆函数和一个静态QMetaObject这些函数在MOC生成的文件中实现。简单说,就是MOC根据代码的关键字,自动提取出信号和槽,并进行处理,生成了相应的cpp文件,相关要使用的函数即由Q_OBJECT定义,也生成在相应cpp文件中,随整个工程一同进行编译链接。
  • 这里需要注意的是,moc过程是发生在预编译之前的,简单说就是moc之后每一个包含Q_OBJECT宏头文件,都会根据该头文件里面的signals、slots、Q_MENU l来生成以moc_XXXX(自定义类名)的.cpp文件,普通CPP文件构建生成的.o文件加,上包含moc生成的cpp构建成的.o文件经过链接,生成的就是最终的目标可执行文件。

3.信号与槽的实现原理

  • 信号(signal)与槽(slot)是qt的一大特色,由元对象系统(meta object
    system)提供,用于对象间的通信,类似的还有借助于函数指针的回调机制,但是比函数回调更加简洁明了,理论上,信号与槽比回调的反应速度要慢,但前者用起来更灵活。
  • 调用函数需要非常清晰地知道什么时候调用回调函数,然而,信号与槽机制,发出信号的对象既不知道也不关心哪一个slot会接收这个信号,QT的信号与槽机制确保了如果你连接一个信号到一个槽上(connet a signal to a slot),那么槽将会在合适的时间被调用并导入该信号的参数。

参考来源:
https://blog.csdn.net/xialianggang1314/article/details/83964392

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值