QT开发工程师知识点体系│├─ 1. C基础必须扎实│ ├─ 面向对象继承/多态/封装│ ├─ STL容器QList/QMap对标vector/map│ ├─ 智能指针QSharedPointer│ ├─ 内存管理RAII、对象树│ └─ 多线程std::thread vs QThread│├─ 2. QT核心框架│ ├─ 信号与槽connect语法、跨线程│ ├─ 元对象系统MOC、属性系统│ ├─ 对象树与所有权│ └─ 事件系统event、过滤器│├─ 3. GUI控件与布局│ ├─ 常用控件QWidget、QPushButton、QLabel...│ ├─ 布局管理器QVBoxLayout、QGridLayout│ ├─ 对话框QMessageBox、QFileDialog│ └─ 样式表qss定制界面│├─ 4. 多线程编程│ ├─ QThread两种用法继承 vs moveToThread│ ├─ 互斥锁QMutex、QReadWriteLock│ ├─ 信号槽跨线程Qt::QueuedConnection│ └─ 线程池QRunnable、QThreadPool│├─ 5. 网络编程│ ├─ TCPQTcpSocket/ QTcpServer│ ├─ UDPQUdpSocket│ ├─ HTTPQNetworkAccessManager│ └─ 协议解析JSON、XML、自定义│├─ 6. 数据库│ ├─ SQLiteQSqlDatabase、QSqlQuery│ ├─ 模型绑定QSqlTableModel QTableView│ └─ 事务与批处理│├─ 7. 文件I/O│ ├─ 文本文件QFile、QTextStream│ ├─ 配置QSettings│ └─ 序列化QDataStream、JSON│├─ 8. QML/Qt Quick嵌入式HMI│ ├─ 声明式语法Rectangle、Text、Image│ ├─ 动画PropertyAnimation、NumberAnimation│ ├─ 与C交互上下文属性、注册类型│ └─ 模型-视图ListModel、ListView│└─ 9. 嵌入式Linux专项├─ 交叉编译配置kit、sysroot├─ 触摸屏适配tslib、linuxfb└─ 性能优化减少内存、避免卡顿## 各模块详细文字介绍### 一、C基础 —— Qt开发的地基C是Qt的母语基础不牢后续学习会处处受限。**面向对象OOP**继承、多态和封装是设计Qt类库的核心思想。所有可视化控件都继承自QWidget通过重写paintEvent等虚函数实现多态这是理解Qt控件体系的关键。**STL容器与Qt容器对照**- std::vector - QList / QVector动态数组。QList内部采用隐式共享Copy-on-Write作为参数传递时效率很高避免不必要的深拷贝。- std::map - QMap / QHashQMap基于红黑树元素自动按键排序QHash基于哈希表查找速度更快但无序。- std::string - QStringQString是Qt中处理文本的核心类支持Unicode编码提供了丰富的字符串操作函数如arg、split、mid等。**智能指针**- QSharedPointer引用计数的共享指针类似于std::shared_ptr。当最后一个引用销毁时自动释放内存。- QScopedPointer独占所有权离开作用域时自动释放类似于std::unique_ptr。- QPointer弱引用指针仅能指向QObject及其子类对象。当目标对象被销毁时它会自动置为nullptr避免了悬空指针问题。- **关键区分**对象树和智能指针的职责要分清。如果QWidget有父对象父对象会管理其生命周期**不要**再用智能指针去包裹否则会导致重复释放。**RAII与Qt对象树**RAII资源获取即初始化是C的核心内存管理哲学在构造函数中申请资源在析构函数中释放资源。Qt的对象树是这个思想的经典实践——父对象销毁时会**按深度优先顺序**自动析构所有子对象这极大简化了GUI开发中的内存管理。---### 二、Qt核心框架 —— 框架的骨架这部分是Qt区别于其他框架的根本。**信号与槽Signal Slot**这是Qt最重要的对象间通信机制本质是观察者模式的实现。connect函数主要有五种语法形式1. **旧式宏语法**connect(sender, SIGNAL(...), receiver, SLOT(...)) —— 运行时字符串匹配编译器不做类型检查不推荐使用。2. **函数指针语法**connect(sender, Sender::signal, receiver, Receiver::slot) —— 编译期类型检查安全可靠。3. **Lambda表达式**connect(sender, Sender::signal, [](...) { ... }) —— 最灵活可直接书写处理逻辑省去单独定义槽函数的麻烦。4. **连接第五个参数**Qt::AutoConnection默认、Qt::DirectConnection、Qt::QueuedConnection、Qt::BlockingQueuedConnection控制信号与槽的执行线程是跨线程安全的关键。**元对象系统MOC**Qt对C的语言扩展。任何包含Q_OBJECT宏的类都会被元对象编译器MOC预处理生成额外的moc_*.cpp文件。这些代码实现了运行时类型信息RTTI、信号槽的动态绑定、属性系统的反射等功能。Q_PROPERTY宏用于声明属性配合setProperty()和property()可实现运行时的动态属性读写。**事件系统**事件是比信号更底层的机制。鼠标移动、键盘按键、定时器到时都由操作系统产生事件经过QApplication的事件循环分发给目标控件。- event(QEvent *e)事件处理的入口可以在此拦截所有类型的事件。- 事件过滤器通过installEventFilter安装过滤器可以在事件到达目标对象之前拦截处理常用于监控子控件的特定行为。---### 三、GUI控件与布局 —— 用户界面的积木**常用控件**- QPushButton命令按钮可设置文本、图标和快捷菜单。- QLabel标签可以显示文本、图片或动图。- QLineEdit单行文本输入框支持输入掩码、校验器和补全。- QComboBox下拉组合框支持可编辑与只读两种模式。- QCheckBox / QRadioButton复选框和单选按钮。**布局管理器**布局是控件在窗口中自动排列、随窗口缩放的关键。- QVBoxLayout / QHBoxLayout垂直/水平盒式布局最简单常用。- QGridLayout将控件按行列网格排列类似表格布局。- QFormLayout表单布局自带标签-字段的成对排列效果。- QStackedLayout层叠布局同一时间只显示一个页面常用于多页向导或Tab页切换。**对话框**- QMessageBox标准消息弹窗信息、警告、错误、询问。- QFileDialog文件打开/保存对话框支持文件类型过滤。- QColorDialog颜色选取器。- QInputDialog提供简单的文本、整数、列表输入弹窗。**样式表QSS**类似CSS的样式控制语言支持选择器、盒模型margin-border-padding-content和伪状态:hover、:pressed、:checked等可实现灵活的主题定制。---### 四、GUI高级特性 —— 进阶界面开发**Model/View架构**将数据存储Model与数据展示View分离是Qt的重要设计模式。- ModelQStandardItemModel通用、QSqlTableModel数据库、自定义Model。- ViewQTableView表格、QListView列表、QTreeView树形。- DelegateQStyledItemDelegate自定义单元格的渲染和编辑行为。**绘图系统QPainter**在paintEvent中使用QPainter绘制图形、文字和图片。QPen控制线条样式QBrush控制填充样式。使用双缓冲技术可避免画面闪烁。**图形视图框架Graphics View**适用于需要大量可交互图元的场景如流程图编辑器、GIS系统。QGraphicsScene管理所有图元QGraphicsView提供视口和缩放平移QGraphicsItem是单个图元基类。---### 五、QML/Qt Quick —— 现代流畅的UI**声明式语法**QML使用类似JSON的声明式语法描述界面内置Rectangle、Text、Image、Item等基本元素。使用Anchor锚布局可以方便地定义元素间的相对位置关系。**动画系统**QML的动画系统非常强大只需几行代码就能实现复杂动画- PropertyAnimation对任意属性进行动画。- NumberAnimation / ColorAnimation针对数值和颜色的动画特化。- Transition在状态切换时应用过渡动画效果。**C与QML交互**这是混合编程的核心- **上下文属性**rootContext()-setContextProperty(name, object)将C对象暴露给QML全局使用。- **注册类型**qmlRegisterTypeMyClass(com.example, 1, 0, MyClass)让QML能实例化C类。- **调用槽函数**使用Q_INVOKABLE标记函数QML可以直接调用。**模型视图**QML中的ListModel和ListView配合使用适合展示动态数据列表。Repeater可以按模板重复生成元素非常灵活。---### 六、多线程编程 —— 保障流畅体验GUI线程负责处理所有界面操作任何耗时任务如文件下载、复杂计算都必须在子线程中执行否则界面会卡死。**QThread两种用法**1. **继承QThread重写run()**在run()中实现耗时逻辑。优点是直观简单缺点是不方便跨线程使用信号槽。2. **moveToThread()推荐**创建独立的工作对象将其移动到一个空QThread中通过信号启动其槽函数。这种方式解耦清晰符合用信号驱动任务的设计思路。**线程同步**- QMutex互斥锁保护临界区。- QMutexLockerRAII风格的锁管理器构造时自动加锁析构时自动解锁避免忘记释放锁。- QReadWriteLock读写锁允许多个线程同时读但只允许一个线程写适合读多写少的场景。- QWaitCondition条件变量用于线程间的事件通知实现等待-唤醒模式。**跨线程信号槽连接**- Qt::QueuedConnection发射信号时将槽调用包装成事件放入接收者线程的事件队列中异步执行是实现跨线程安全通信的标准方式。- Qt::BlockingQueuedConnection与上述相同但发射信号的线程会阻塞直到槽执行完毕可用于需要返回结果的跨线程调用。**线程池**对于大量短暂的小任务频繁创建和销毁线程开销很大。QThreadPool管理一组可复用的工作线程配合QRunnable接口使用。QtConcurrent::run()提供更简洁的函数式异步调用方式。---### 七、网络编程 —— 连接世界的纽带**TCP通信**TCP是面向连接的、可靠的字节流协议。QTcpServer监听连接QTcpSocket建立连接后收发数据。实际开发中需要处理粘包/拆包问题定义消息边界如长度前缀或分隔符以及实现断线重连和心跳检测机制。**UDP通信**UDP是无连接、不可靠的数据报协议传输快但可能丢包。QUdpSocket支持单播、组播和广播。在对可靠性有要求时需要在应用层设计确认和重传机制。**HTTP客户端**QNetworkAccessManager是管理HTTP请求的异步核心类所有请求都是异步的不会阻塞GUI线程。使用get()、post()方法发起请求通过finished信号处理响应。**协议解析**- JSON使用QJsonDocument、QJsonObject、QJsonArray解析和构建JSON数据是REST API通信的首选格式。- XMLQXmlStreamReader提供流式读取适合处理较大的XML文件。- 自定义二进制协议需要自行设计帧格式注意**大小端**字节序的转换使用qToBigEndian/qFromBigEndian等函数。---### 八、数据库 —— 数据的持久化基石**数据库连接与查询**- QSqlDatabase管理数据库连接Qt内置支持SQLite、MySQL、PostgreSQL等多种驱动。- QSqlQuery执行SQL语句使用参数化查询prepare() bindValue()可有效防止SQL注入。- QSqlTableModel将数据库表直接映射为数据模型配合QTableView显示支持直接编辑和提交修改。**事务处理**将多条SQL操作放在一个事务中transaction() - 执行SQL - commit() / rollback()要么全部成功要么全部回滚保证数据一致性。批量插入时使用事务可以显著提升性能。---### 九、文件I/O与序列化 —— 数据存取的基础**文本文件操作**QFile是文件操作的入口类配合QTextStream可以按行读写文本自动处理编码转换。QFileInfo可获取文件大小、创建时间、权限等元信息。**配置文件**QSettings封装了跨平台的配置存储方案支持INI格式Linux和注册表Windows。使用时只需指定组织名和应用名调用setValue()和value()即可读写。**二进制与JSON序列化**QDataStream配合QFile可实现二进制序列化读写效率高适合保存程序内部状态。QJsonDocument用于JSON格式的序列化适合配置文件和数据交换场景。---### 十、嵌入式Linux专项 —— 走进硬件世界**开发环境搭建**在PC上为ARM等目标平台编译程序需要交叉编译工具链。在Qt Creator中配置Kit时需指定设备类型、C/C编译器如arm-linux-gnueabihf-g、Sysroot目标平台的系统根目录包含所有依赖库。**显示系统选择**- linuxfb直接操作帧缓冲简单但无GPU加速。- eglfs使用OpenGL ES进行硬件加速性能好是大多数嵌入式设备的推荐选择。- wayland新一代显示协议更现代但复杂度较高。**触摸屏适配**- tslib电阻式触摸屏的校准和滤波库将原始坐标转换为屏幕坐标。- evdevLinux输入子系统支持电容屏多点触控。- Qt通过在环境变量中指定触摸设备节点如QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS来识别触屏。**性能优化要点**嵌入式设备资源有限性能优化是必修课- 设置Qt::WA_OpaquePaintEvent避免不必要的背景擦除。- 使用QOpenGLWidget替代传统QWidget进行复杂绘图利用GPU加速。- 避免在主线程中执行耗时操作保证界面60fps流畅。- 控制图片资源的分辨率和格式减少内存占用。- 考虑使用Qt Lite配置工具裁剪掉不需要的模块减小库体积。**部署与调试**- 配置Qt Creator远程调试通过SSH连接到目标设备自动上传和启动程序。- 使用ldd命令检查可执行文件的依赖库确保依赖齐全。- 编写启动脚本设置LD_LIBRARY_PATH等环境变量或创建systemd服务实现开机自启动。
Qt 知识点及简易思维导图
QT开发工程师知识点体系│├─ 1. C基础必须扎实│ ├─ 面向对象继承/多态/封装│ ├─ STL容器QList/QMap对标vector/map│ ├─ 智能指针QSharedPointer│ ├─ 内存管理RAII、对象树│ └─ 多线程std::thread vs QThread│├─ 2. QT核心框架│ ├─ 信号与槽connect语法、跨线程│ ├─ 元对象系统MOC、属性系统│ ├─ 对象树与所有权│ └─ 事件系统event、过滤器│├─ 3. GUI控件与布局│ ├─ 常用控件QWidget、QPushButton、QLabel...│ ├─ 布局管理器QVBoxLayout、QGridLayout│ ├─ 对话框QMessageBox、QFileDialog│ └─ 样式表qss定制界面│├─ 4. 多线程编程│ ├─ QThread两种用法继承 vs moveToThread│ ├─ 互斥锁QMutex、QReadWriteLock│ ├─ 信号槽跨线程Qt::QueuedConnection│ └─ 线程池QRunnable、QThreadPool│├─ 5. 网络编程│ ├─ TCPQTcpSocket/ QTcpServer│ ├─ UDPQUdpSocket│ ├─ HTTPQNetworkAccessManager│ └─ 协议解析JSON、XML、自定义│├─ 6. 数据库│ ├─ SQLiteQSqlDatabase、QSqlQuery│ ├─ 模型绑定QSqlTableModel QTableView│ └─ 事务与批处理│├─ 7. 文件I/O│ ├─ 文本文件QFile、QTextStream│ ├─ 配置QSettings│ └─ 序列化QDataStream、JSON│├─ 8. QML/Qt Quick嵌入式HMI│ ├─ 声明式语法Rectangle、Text、Image│ ├─ 动画PropertyAnimation、NumberAnimation│ ├─ 与C交互上下文属性、注册类型│ └─ 模型-视图ListModel、ListView│└─ 9. 嵌入式Linux专项├─ 交叉编译配置kit、sysroot├─ 触摸屏适配tslib、linuxfb└─ 性能优化减少内存、避免卡顿## 各模块详细文字介绍### 一、C基础 —— Qt开发的地基C是Qt的母语基础不牢后续学习会处处受限。**面向对象OOP**继承、多态和封装是设计Qt类库的核心思想。所有可视化控件都继承自QWidget通过重写paintEvent等虚函数实现多态这是理解Qt控件体系的关键。**STL容器与Qt容器对照**- std::vector - QList / QVector动态数组。QList内部采用隐式共享Copy-on-Write作为参数传递时效率很高避免不必要的深拷贝。- std::map - QMap / QHashQMap基于红黑树元素自动按键排序QHash基于哈希表查找速度更快但无序。- std::string - QStringQString是Qt中处理文本的核心类支持Unicode编码提供了丰富的字符串操作函数如arg、split、mid等。**智能指针**- QSharedPointer引用计数的共享指针类似于std::shared_ptr。当最后一个引用销毁时自动释放内存。- QScopedPointer独占所有权离开作用域时自动释放类似于std::unique_ptr。- QPointer弱引用指针仅能指向QObject及其子类对象。当目标对象被销毁时它会自动置为nullptr避免了悬空指针问题。- **关键区分**对象树和智能指针的职责要分清。如果QWidget有父对象父对象会管理其生命周期**不要**再用智能指针去包裹否则会导致重复释放。**RAII与Qt对象树**RAII资源获取即初始化是C的核心内存管理哲学在构造函数中申请资源在析构函数中释放资源。Qt的对象树是这个思想的经典实践——父对象销毁时会**按深度优先顺序**自动析构所有子对象这极大简化了GUI开发中的内存管理。---### 二、Qt核心框架 —— 框架的骨架这部分是Qt区别于其他框架的根本。**信号与槽Signal Slot**这是Qt最重要的对象间通信机制本质是观察者模式的实现。connect函数主要有五种语法形式1. **旧式宏语法**connect(sender, SIGNAL(...), receiver, SLOT(...)) —— 运行时字符串匹配编译器不做类型检查不推荐使用。2. **函数指针语法**connect(sender, Sender::signal, receiver, Receiver::slot) —— 编译期类型检查安全可靠。3. **Lambda表达式**connect(sender, Sender::signal, [](...) { ... }) —— 最灵活可直接书写处理逻辑省去单独定义槽函数的麻烦。4. **连接第五个参数**Qt::AutoConnection默认、Qt::DirectConnection、Qt::QueuedConnection、Qt::BlockingQueuedConnection控制信号与槽的执行线程是跨线程安全的关键。**元对象系统MOC**Qt对C的语言扩展。任何包含Q_OBJECT宏的类都会被元对象编译器MOC预处理生成额外的moc_*.cpp文件。这些代码实现了运行时类型信息RTTI、信号槽的动态绑定、属性系统的反射等功能。Q_PROPERTY宏用于声明属性配合setProperty()和property()可实现运行时的动态属性读写。**事件系统**事件是比信号更底层的机制。鼠标移动、键盘按键、定时器到时都由操作系统产生事件经过QApplication的事件循环分发给目标控件。- event(QEvent *e)事件处理的入口可以在此拦截所有类型的事件。- 事件过滤器通过installEventFilter安装过滤器可以在事件到达目标对象之前拦截处理常用于监控子控件的特定行为。---### 三、GUI控件与布局 —— 用户界面的积木**常用控件**- QPushButton命令按钮可设置文本、图标和快捷菜单。- QLabel标签可以显示文本、图片或动图。- QLineEdit单行文本输入框支持输入掩码、校验器和补全。- QComboBox下拉组合框支持可编辑与只读两种模式。- QCheckBox / QRadioButton复选框和单选按钮。**布局管理器**布局是控件在窗口中自动排列、随窗口缩放的关键。- QVBoxLayout / QHBoxLayout垂直/水平盒式布局最简单常用。- QGridLayout将控件按行列网格排列类似表格布局。- QFormLayout表单布局自带标签-字段的成对排列效果。- QStackedLayout层叠布局同一时间只显示一个页面常用于多页向导或Tab页切换。**对话框**- QMessageBox标准消息弹窗信息、警告、错误、询问。- QFileDialog文件打开/保存对话框支持文件类型过滤。- QColorDialog颜色选取器。- QInputDialog提供简单的文本、整数、列表输入弹窗。**样式表QSS**类似CSS的样式控制语言支持选择器、盒模型margin-border-padding-content和伪状态:hover、:pressed、:checked等可实现灵活的主题定制。---### 四、GUI高级特性 —— 进阶界面开发**Model/View架构**将数据存储Model与数据展示View分离是Qt的重要设计模式。- ModelQStandardItemModel通用、QSqlTableModel数据库、自定义Model。- ViewQTableView表格、QListView列表、QTreeView树形。- DelegateQStyledItemDelegate自定义单元格的渲染和编辑行为。**绘图系统QPainter**在paintEvent中使用QPainter绘制图形、文字和图片。QPen控制线条样式QBrush控制填充样式。使用双缓冲技术可避免画面闪烁。**图形视图框架Graphics View**适用于需要大量可交互图元的场景如流程图编辑器、GIS系统。QGraphicsScene管理所有图元QGraphicsView提供视口和缩放平移QGraphicsItem是单个图元基类。---### 五、QML/Qt Quick —— 现代流畅的UI**声明式语法**QML使用类似JSON的声明式语法描述界面内置Rectangle、Text、Image、Item等基本元素。使用Anchor锚布局可以方便地定义元素间的相对位置关系。**动画系统**QML的动画系统非常强大只需几行代码就能实现复杂动画- PropertyAnimation对任意属性进行动画。- NumberAnimation / ColorAnimation针对数值和颜色的动画特化。- Transition在状态切换时应用过渡动画效果。**C与QML交互**这是混合编程的核心- **上下文属性**rootContext()-setContextProperty(name, object)将C对象暴露给QML全局使用。- **注册类型**qmlRegisterTypeMyClass(com.example, 1, 0, MyClass)让QML能实例化C类。- **调用槽函数**使用Q_INVOKABLE标记函数QML可以直接调用。**模型视图**QML中的ListModel和ListView配合使用适合展示动态数据列表。Repeater可以按模板重复生成元素非常灵活。---### 六、多线程编程 —— 保障流畅体验GUI线程负责处理所有界面操作任何耗时任务如文件下载、复杂计算都必须在子线程中执行否则界面会卡死。**QThread两种用法**1. **继承QThread重写run()**在run()中实现耗时逻辑。优点是直观简单缺点是不方便跨线程使用信号槽。2. **moveToThread()推荐**创建独立的工作对象将其移动到一个空QThread中通过信号启动其槽函数。这种方式解耦清晰符合用信号驱动任务的设计思路。**线程同步**- QMutex互斥锁保护临界区。- QMutexLockerRAII风格的锁管理器构造时自动加锁析构时自动解锁避免忘记释放锁。- QReadWriteLock读写锁允许多个线程同时读但只允许一个线程写适合读多写少的场景。- QWaitCondition条件变量用于线程间的事件通知实现等待-唤醒模式。**跨线程信号槽连接**- Qt::QueuedConnection发射信号时将槽调用包装成事件放入接收者线程的事件队列中异步执行是实现跨线程安全通信的标准方式。- Qt::BlockingQueuedConnection与上述相同但发射信号的线程会阻塞直到槽执行完毕可用于需要返回结果的跨线程调用。**线程池**对于大量短暂的小任务频繁创建和销毁线程开销很大。QThreadPool管理一组可复用的工作线程配合QRunnable接口使用。QtConcurrent::run()提供更简洁的函数式异步调用方式。---### 七、网络编程 —— 连接世界的纽带**TCP通信**TCP是面向连接的、可靠的字节流协议。QTcpServer监听连接QTcpSocket建立连接后收发数据。实际开发中需要处理粘包/拆包问题定义消息边界如长度前缀或分隔符以及实现断线重连和心跳检测机制。**UDP通信**UDP是无连接、不可靠的数据报协议传输快但可能丢包。QUdpSocket支持单播、组播和广播。在对可靠性有要求时需要在应用层设计确认和重传机制。**HTTP客户端**QNetworkAccessManager是管理HTTP请求的异步核心类所有请求都是异步的不会阻塞GUI线程。使用get()、post()方法发起请求通过finished信号处理响应。**协议解析**- JSON使用QJsonDocument、QJsonObject、QJsonArray解析和构建JSON数据是REST API通信的首选格式。- XMLQXmlStreamReader提供流式读取适合处理较大的XML文件。- 自定义二进制协议需要自行设计帧格式注意**大小端**字节序的转换使用qToBigEndian/qFromBigEndian等函数。---### 八、数据库 —— 数据的持久化基石**数据库连接与查询**- QSqlDatabase管理数据库连接Qt内置支持SQLite、MySQL、PostgreSQL等多种驱动。- QSqlQuery执行SQL语句使用参数化查询prepare() bindValue()可有效防止SQL注入。- QSqlTableModel将数据库表直接映射为数据模型配合QTableView显示支持直接编辑和提交修改。**事务处理**将多条SQL操作放在一个事务中transaction() - 执行SQL - commit() / rollback()要么全部成功要么全部回滚保证数据一致性。批量插入时使用事务可以显著提升性能。---### 九、文件I/O与序列化 —— 数据存取的基础**文本文件操作**QFile是文件操作的入口类配合QTextStream可以按行读写文本自动处理编码转换。QFileInfo可获取文件大小、创建时间、权限等元信息。**配置文件**QSettings封装了跨平台的配置存储方案支持INI格式Linux和注册表Windows。使用时只需指定组织名和应用名调用setValue()和value()即可读写。**二进制与JSON序列化**QDataStream配合QFile可实现二进制序列化读写效率高适合保存程序内部状态。QJsonDocument用于JSON格式的序列化适合配置文件和数据交换场景。---### 十、嵌入式Linux专项 —— 走进硬件世界**开发环境搭建**在PC上为ARM等目标平台编译程序需要交叉编译工具链。在Qt Creator中配置Kit时需指定设备类型、C/C编译器如arm-linux-gnueabihf-g、Sysroot目标平台的系统根目录包含所有依赖库。**显示系统选择**- linuxfb直接操作帧缓冲简单但无GPU加速。- eglfs使用OpenGL ES进行硬件加速性能好是大多数嵌入式设备的推荐选择。- wayland新一代显示协议更现代但复杂度较高。**触摸屏适配**- tslib电阻式触摸屏的校准和滤波库将原始坐标转换为屏幕坐标。- evdevLinux输入子系统支持电容屏多点触控。- Qt通过在环境变量中指定触摸设备节点如QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS来识别触屏。**性能优化要点**嵌入式设备资源有限性能优化是必修课- 设置Qt::WA_OpaquePaintEvent避免不必要的背景擦除。- 使用QOpenGLWidget替代传统QWidget进行复杂绘图利用GPU加速。- 避免在主线程中执行耗时操作保证界面60fps流畅。- 控制图片资源的分辨率和格式减少内存占用。- 考虑使用Qt Lite配置工具裁剪掉不需要的模块减小库体积。**部署与调试**- 配置Qt Creator远程调试通过SSH连接到目标设备自动上传和启动程序。- 使用ldd命令检查可执行文件的依赖库确保依赖齐全。- 编写启动脚本设置LD_LIBRARY_PATH等环境变量或创建systemd服务实现开机自启动。