### 一、核心概念与机制(必考基础)
这类问题考察你对QT最基本特性的理解。
1. **信号与槽 (Signals & Slots)**
* 解释一下QT的信号与槽机制是什么?它有什么优点?
* 有几种连接方式?`Qt::AutoConnection`, `Qt::DirectConnection`, `Qt::QueuedConnection` 等枚举值有什么区别?分别在什么场景下使用?
* 信号和槽的参数类型必须完全一致吗?什么是隐式转换?
* `moc`(元对象编译器)在信号与槽机制中扮演什么角色?
* Lambda表达式如何作为槽函数使用?需要注意什么?
2. **对象模型与内存管理**
* QT的对象树机制是如何工作的?父对象析构时会发生什么?
* 什么是`QObject`?它提供了哪些核心功能?
* `deleteLater()` 的作用是什么?为什么需要它?
* QT中是如何处理跨线程对象销毁的?
3. **事件处理 (Event Handling)**
* QT的事件循环机制是怎样的?
* `event()` 函数和事件处理器(如`mousePressEvent()`)之间的关系是什么?
* 如何安装事件过滤器(`installEventFilter()`)?它的应用场景是什么?
* 如何自定义一个事件并发送(`QCoreApplication::postEvent()`)?
---
### 二、GUI编程与Widgets
这类问题考察你构建用户界面的能力。
1. **布局管理 (Layouts)**
* 常用的布局管理器有哪些?(`QHBoxLayout`, `QVBoxLayout`, `QGridLayout`, `QFormLayout`)
* 如何实现一个随窗口大小自适应变化的界面?
2. **绘图与渲染**
* 如何在QT中进行自定义绘图?(重写`paintEvent()`,使用`QPainter`)
* `QWidget`, `QFrame`, `QMainWindow` 有什么区别?
* `QPixmap`, `QImage`, `QPicture` 有什么区别?分别用在什么场景?
3. **模型/视图编程 (Model/View)**
* 解释一下MVC(模型-视图-控制器)架构在QT中是如何简化为Model/View的?
* `QListView`, `QTableView`, `QTreeView` 分别搭配什么模型?(`QStringListModel`, `QStandardItemModel`, 自定义模型)
* 如何自定义一个模型?需要重写哪些接口?
---
### 三、高级与底层原理
这类问题考察你对QT的深入理解和经验。
1. **多线程与并发 (Multithreading)**
* **必考**:为什么不能在主线程(UI线程)执行耗时操作?
* 有哪几种在QT中创建线程的方式?(继承`QThread` vs. `moveToThread`)
* 为什么推荐使用`moveToThread`的方式?`QThread::run` 的默认实现是什么?
* 如何安全地在不同线程间传递数据?(信号槽、互斥锁`QMutex`、`QReadWriteLock`)
* `QTimer` 在子线程中如何使用?需要注意什么?
2. **网络编程**
* `QTcpSocket` 和 `QUdpSocket` 的区别和使用场景。
* 如何处理粘包/拆包问题?
* `QNetworkAccessManager` 常用于什么功能?(HTTP请求,下载文件)
3. **性能与调试**
* 如何进行QT应用程序的性能优化?
* 你使用过哪些QT的调试工具或技巧?(如Qt Creator的调试模式、日志输出)
---
### 四、项目经验与实战(非常重要)
面试官会根据你的简历和项目来问,务必准备好。
1. **“你最近做的一个QT项目是什么?你负责了哪些模块?”**
* 准备一个2-3分钟的介绍,清晰说明项目背景、你的角色、技术挑战和解决方案。
2. **“在项目中遇到的最大的技术挑战是什么?你是怎么解决的?”**
* 例如:多线程数据同步问题、自定义控件的性能问题、复杂布局的实现、特定平台的兼容性问题等。
3. **“你如何实现一个自定义的控件?”**
* 从设计思路(继承哪个类)、绘图(`paintEvent`)、事件处理(`mouseEvent`)、暴露接口(属性、信号槽)等方面回答。
4. **“你有跨平台(Windows/Linux/macOS)开发和部署的经验吗?遇到过什么问题?”**
* 聊聊不同平台下的编译、字体、样式、路径处理等差异。
---
### 五、对比与扩展
1. **QT Widgets 和 QML 有什么区别?各自的优缺点和适用场景是什么?**
2. **对比一下QT和其他GUI框架(如MFC, WPF, Electron)。**
3. **C++11/14/17的新特性(如智能指针、Lambda表达式)你在QT项目中是如何使用的?**
### 面试准备建议
1. **基础扎实**:确保对信号槽、内存管理、事件体系、多线程等核心概念了如指掌,能脱口而出。
2. **项目复盘**:深入复盘你写在简历上的每一个QT项目,能用简洁的语言讲清楚,并能应对深挖。
3. **手写代码**:准备一些简单的手写代码题,比如:
* 实现一个简单的计数器界面(按钮+标签)。
* 写一个线程安全的日志类。
4. **提问环节**:准备一两个有深度的问题向面试官提问,展现你的思考和学习能力。