【Qt 面试题】Qt信号槽机制与优势与不足

简介: 【Qt 面试题】Qt信号槽机制与优势与不足


  • 概念

信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。

这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,意思是,将想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。

也就是说,当信号发出时,被连接的槽函数会自动被回调。

槽的本质是类的成员函数,其参数可以是任意类型的。

和普通C++成员函数几乎没有区别,它可以是虚函数;也可以被重载;

可以是公有的、保护的、私有的、也可以被其他C++成员函数调用。

唯一区别的是:槽可以与信号连接在一起,每当和槽连接的信号被发射的时候,就会调用这个槽。

  • 优点

①类型安全。需要关联的信号槽的签名必须是等同的。即信号的参数类型和参数个数同接受该信号的槽的参数类型和参数个数相同。若信号和槽签名不一致,编译器会报错。

②松散耦合。信号和槽机制减弱了Qt对象的耦合度。激发信号的Qt对象无需知道是那个对象的那个信号槽接收它发出的信号,它只需在适当的时间发送适当的信号即可,而不需要关心是否被接受和那个对象接受了。Qt就保证了适当的槽得到了调用,即使关联的对象在运行时被删除。程序也不会奔溃。

③灵活性。一个信号可以关联多个槽,或多个信号关联同一个槽。


  • 不足

速度较慢。与回调函数相比,信号和槽机制运行速度比直接调用非虚函数慢10倍。

原因:

①需要定位接收信号的对象。

②安全地遍历所有关联槽。

③编组、解组传递参数。

④多线程的时候,信号需要排队等待。(然而,与创建对象的new操作及删除对象的delete操作相比,信号和槽的运行代价只是他们很少的一部分。信号和槽机制导致的这点性能损耗,对实时应用程序是可以忽略的。)

目录
相关文章
|
2月前
Qt第二课 核心机制信号槽
Qt第二课 核心机制信号槽
24 1
|
2月前
|
Android开发 移动开发 小程序
binder机制原理面试,安卓app开发教程
binder机制原理面试,安卓app开发教程
binder机制原理面试,安卓app开发教程
|
1月前
|
安全 C++ Windows
Qt信号与槽机制
Qt信号与槽机制
19 1
|
2月前
【qt】核心机制信号槽(下)
【qt】核心机制信号槽(下)
18 1
|
2月前
|
缓存 安全 Java
7张图带你轻松理解Java 线程安全,java缓存机制面试
7张图带你轻松理解Java 线程安全,java缓存机制面试
|
4天前
|
消息中间件 Kafka 程序员
Kafka面试必备:深度解析Replica副本的作用与机制
**Kafka的Replica副本是保证数据可靠性的关键机制。每个Partition有Leader和Follower副本,Leader处理读写请求及管理同步,Follower被动同步并准备成为新Leader。从Kafka 2.4开始,Follower在完全同步时也可提供读服务,提升性能。数据一致性通过高水位机制和Leader Epoch机制保证,后者更精确地判断和恢复数据一致性,增强系统容错能力。**
11 1
|
21天前
|
负载均衡 算法 Java
【面试宝藏】Go语言运行时机制面试题
探索Go语言运行时,了解goroutine的轻量级并发及GMP模型,包括G(协程)、M(线程)和P(处理器)。GMP调度涉及Work Stealing和Hand Off机制,实现负载均衡。文章还讨论了从协作到基于信号的抢占式调度,以及GC的三色标记算法和写屏障技术。理解这些概念有助于优化Go程序性能。
29 4
|
1天前
|
负载均衡 NoSQL 中间件
|
1月前
|
XML JSON 前端开发
Qt委托代理机制之《Model/View/Delegate使用方法》
Qt委托代理机制之《Model/View/Delegate使用方法》
22 1
|
19天前
|
编译器
(16):深入 Qt5 信号槽新语法
(16):深入 Qt5 信号槽新语法