01
信号槽初探
什么是信号槽?为什么Qt需要信号槽?信号槽与回调函数的对比。
概念对比
02
元对象系统
QObject基类、Q_OBJECT宏、元对象编译器(moc)的作用。
mocQObject
03
信号的定义与声明
signals关键字、信号函数签名规则、信号的重载。
signals重载
04
槽的定义与声明
slots关键字、普通函数作为槽、Lambda表达式作为槽。
slotsLambda
05
connect函数详解
connect的5种重载形式、函数指针连接、字符串连接。
connect重载
06
disconnect函数
断开连接的时机、断开所有连接、断开特定连接。
断开管理
07
信号与槽的连接方式
Qt::AutoConnection、Direct、QueuedConnection。
连接类型队列
08
跨线程信号槽
线程安全、事件循环、队列连接的内部机制。
线程事件循环
09
信号槽的同步与异步
阻塞与非阻塞、QMetaObject::invokeMethod。
同步异步
10
自定义信号
在自定义类中定义信号、发射信号(emit)、信号参数传递。
emit自定义
11
信号槽与模板
为什么信号槽不支持模板?替代方案。
模板限制
12
信号槽的性能开销
moc生成代码分析、连接查找、参数传递的代价。
性能moc
13
信号槽的返回值
信号可以有返回值吗?qReturnArg的使用。
返回值qReturnArg
14
信号槽与智能指针
QPointer、QSharedPointer在信号槽中的使用。
智能指针安全
15
信号槽的调试技巧
QSignalSpy、qDebug追踪信号、QT_DEBUG_PLUGINS。
调试QSignalSpy
16
信号槽与事件循环
QEventLoop、信号驱动的事件处理。
事件循环QEventLoop
17
信号槽与QMetaMethod
运行时获取信号/槽信息、动态调用。
反射QMetaMethod
18
信号槽与属性系统
Q_PROPERTY、属性通知信号、数据绑定。
属性绑定
19
信号槽与QML
QML中的信号与槽、C++与QML的信号交互。
QML交互
20
信号槽的线程安全
可重入性、锁机制、跨线程信号的设计模式。
线程安全锁
21
信号槽与设计模式
观察者模式、中介者模式、命令模式在信号槽中的体现。
设计模式观察者
22
信号槽的异常安全
RAII与连接管理、异常发生时断开连接。
异常RAII
23
信号槽与第三方库
Boost.Signals2与Qt信号槽的对比。
Boost对比
24
信号槽的单元测试
模拟信号、验证槽调用、测试异步信号。
测试模拟
25
信号槽的性能优化
减少信号发射次数、批量更新、使用Lambda捕获。
优化Lambda
26
信号槽与QStateMachine
状态机中的信号驱动、状态转换。
状态机驱动
27
信号槽的序列化
将信号槽连接保存到文件、动态恢复连接。
序列化持久化
28
信号槽与插件系统
插件间通信、动态加载的信号槽连接。
插件动态加载
29
信号槽的陷阱与误区
循环连接、内存泄漏、悬空指针。
陷阱内存泄漏
30
信号槽的未来
C++20协程与信号槽、Qt6的新变化、提案与展望。
未来协程