C++ 八股文(Qt 基础知识)
1. Qt的信号与槽机制是什么?有哪些连接方式?
信号与槽机制是 Qt 用于对象间通信的一种机制。对象通过信号发出事件通知,其他对象通过槽函数响应这些事件,从而实现松耦合的通信。
连接方式:
- 自动连接(Auto Connection):默认方式,Qt 会自动决定信号与槽是同步还是异步调用,取决于信号和槽是否在同一线程。
- 直接连接(Direct Connection):信号发出时直接在发出者所在的线程中调用槽。
- 队列连接(Queued Connection):将信号的调用排入目标对象线程的事件队列,槽会在目标线程中执行。
- 独立连接(Unique Connection):确保信号和槽之间的连接是唯一的,避免重复连接。
2. 信号与槽的优缺点是什么?
优点:
- 松耦合:信号与槽之间不直接依赖,便于扩展和修改。
- 线程安全:在多线程环境下,Qt 会自动处理信号与槽的同步。
- 易于维护:信号与槽的方式使得代码结构清晰,维护性好。
缺点:
- 性能开销:信号和槽的调用机制会增加一定的性能开销。
- 调试困难:如果连接不当,可能会导致难以追踪的问题。
3. 一个信号可以连接多个槽吗?一个槽可以连接多个信号吗?
- 一个信号可以连接多个槽:信号发射时,所有连接的槽会依次被调用。
- 一个槽可以连接多个信号:一个槽可以响应多个信号,只要它的参数签名与信号匹配。
4. 如何自定义信号和槽?
- 自定义信号:在类的 signals 部分使用 signals 关键字定义。
- 自定义槽:在类的 public slots 或 private slots 部分定义。
5. Qt中的元对象系统(Meta-Object System)是什么?
元对象系统是 Qt 提供的一种机制,用于支持信号与槽、动态属性、类型识别等功能。它依赖于 Q_OBJECT 宏,并通过 MOC(Meta-Object Compiler)生成元对象信息,使得 Qt 可以在运行时获取对象的类型信息。
6. Q_OBJECT宏的作用是什么?
Q_OBJECT 宏启用 Qt 的元对象系统,支持信号与槽机制、动态属性、对象反射等功能。每个使用信号与槽的类都必须声明该宏,以便 MOC 生成相关的元对象代码。
7. MOC(Meta-Object Compiler)是什么?
MOC 是 Qt 提供的工具,负责处理含有 Q_OBJECT 宏的类。它会生成包含元对象信息的代码,以支持信号与槽、动态属性等功能。生成的代码会被编译并链接到最终的应用程序中。
8. Qt的对象树机制是什么?父子对象关系有什么作用?
Qt 的 对象树机制是一种父子对象关系管理方式。每个 QObject 对象都有一个父对象,父对象会自动销毁其所有子对象。父子关系在内存管理中非常重要,可以简化资源管理,避免手动 delete。
9. Qt中如何实现内存管理?什么时候需要手动delete?
Qt 使用 父子对象机制来自动管理内存。每个对象如果有父对象,父对象会在销毁时自动销毁所有子对象。没有父对象的对象需要手动调用 delete 来销毁。
10. QObject的deleteLater()函数的作用是什么?
deleteLater() 函数将对象的销毁操作推迟到当前事件处理完毕后执行,避免在事件处理过程中删除对象引起的崩溃或未定义行为。常用于异步删除对象。
本专栏系统梳理C++技术面试核心考点,涵盖语言基础、面向对象、内存管理、STL容器、模板编程及经典算法。从引用指针、虚函数表、智能指针等底层原理,到继承多态、运算符重载等OOP特性从const、static、inline等关键字辨析,到动态规划、KMP算法、并查集等手写实现。每个知识点以面试答题形式呈现,注重原理阐述而非冗长代码,帮助你快速构建完整知识体系,从容应对面试官提问,顺利拿下offer。

查看30道真题和解析