QT::常用类概念整理

一、模块基类

1.01 QApplication / QGuiApplication / QCoreApplication
 - QApplication:适用于含有窗口系统的GUI应用
 - QGuiApplication支持更底层的GUI功能但不依赖于特定的窗口系统,
 - QCoreApplication`则用于没有GUI界面的应用程序
1.02 QWidget/QMainWindow/QDialog
 - QWidget:这是所有用户界面对象的基类。几乎所有的GUI元素都是从`QWidget`派生出来的,包括按钮、文本框等。它负责接收鼠标、键盘和其他事件,并进行绘制操作。
 - QMainWindow:提供了一个带有菜单栏、工具栏、状态栏和中心部件的主应用程序窗口的标准框架,非常适合用来构建具有复杂界面的应用程序。
 - QDialog:对话框窗口的基础类,用于短期任务或简短的交互式会话。`QDialog`及其子类如`QMessageBox`、`QFileDialog`等在与用户沟通信息时非常有用。
1.03 QLayou管理子控件布局的抽象基类
具体的布局管理器如`QVBoxLayout`、`QHBoxLayout`、`QGridLayout`
1.04 QLayou管理子控件布局的抽象基类
具体的布局管理器如`QVBoxLayout`、`QHBoxLayout`、`QGridLayout`
1.05 QObject
为Qt的对象模型提供了核心功能,包括信号与槽机制、运行时类型信息、动态属性系统等。它是大多数Qt类的基类
1.06 QNetworkAccessManager
用于执行网络操作,例如发送HTTP请求和处理响应。它是访问Web服务或者实现客户端-服务器通信的关键组件之一。
1.07 QSqlDatabase & QSqlQuery
用于数据库连接管理和执行SQL查询。`QSqlDatabase`允许你打开数据库连接,而`QSqlQuery`则用于执行SQL语句并获取结果集。
1.08 QFileSystemModel
一个方便的模型类,可以用来展示文件系统的结构。它通常与视图类如`QTreeView`结合使用,以显示目录树和文件列表

二、常用控件

2.01 QPushButton
- **功能**:标准的按钮控件,用于触发操作。
- **特点**:
  - 支持文本、图标或两者结合
  - 可以设置默认按钮、自动重复等属性
  - 与信号槽机制结合,响应点击事件
- **常用信号**:`clicked()`, `pressed()`, `released()`
- **适用场景**:对话框确认、功能按钮、工具栏操作等
2.02 QLabel
- **功能**:用于显示文本或图像的静态控件。
- **特点**:
  - 支持富文本(HTML格式)
  - 可设置对齐方式、缩放模式
  - 常用于显示提示信息、标题、图片预览
- **常用方法**:`setText()`, `setPixmap()`, `setAlignment()`
- **适用场景**:界面说明、状态显示、图片展示
2.03 QLineEdit
- **功能**:单行文本输入框。
- **特点**:
  - 支持输入验证(QValidator)
  - 可设置占位符文本、回显模式(密码输入)
  - 支持右键菜单和拖放操作
- **常用信号**:`textChanged()`, `returnPressed()`
- **适用场景**:用户名/密码输入、搜索框、配置项编辑
2.04 QTextEdit/QPlainTextEdit
- **功能**:多行文本编辑控件。
- **区别**:
  - `QTextEdit` 支持富文本(HTML/CSS)
  - `QPlainTextEdit` 仅支持纯文本,性能更好
- **特点**:
  - 支持滚动、查找、复制粘贴
  - 可设置只读模式
- **适用场景**:
  - `QTextEdit`:富文本编辑器、日志显示
  - `QPlainTextEdit`:代码编辑、日志查看
2.05 QComboBox
- **功能**:下拉列表选择控件。
- **特点**:
  - 可设置为可编辑或只读模式
  - 支持添加/删除项、设置当前项
  - 可包含图标和文本
- **常用信号**:`currentIndexChanged()`, `currentTextChanged()`
- **适用场景**:选项选择、配置设置、数据过滤
2.06 QCheckBox / QRadioButton
- **功能**:
  - `QCheckBox`:复选框,支持多选
  - `QRadioButton`:单选按钮,同一组内互斥
- **特点**:
  - 可设置三态(未选、选中、部分选中)
  - 支持图标和文本
- **常用信号**:`stateChanged()`, `toggled()`
- **适用场景**:选项配置、功能开关、表单填写
2.07 QSpinBox/QDoubleSpinBox
- **功能**:数值输入控件。
- **区别**:
  - `QSpinBox`:整数输入
  - `QDoubleSpinBox`:浮点数输入
- **特点**:
  - 可设置范围、步长、前缀/后缀
  - 支持键盘和鼠标滚轮输入
- **适用场景**:参数设置、数量选择、配置调整
2.08 QSlider/QDial
- **功能**:滑块和旋钮控件,用于直观地选择数值。
- **特点**:
  - `QSlider`:水平或垂直滑动
  - `QDial`:圆形旋钮,适合小空间
  - 可设置刻度、方向、范围
- **常用信号**:`valueChanged()`, `sliderPressed()`, `sliderReleased()`
- **适用场景**:音量控制、亮度调节、参数调整
2.09 QListView / QTreeView / QTableView
- **功能**:数据视图控件,用于显示模型中的数据。
- **区别**:
  - `QListView`:列表视图
  - `QTreeView`:树形视图,支持层级结构
  - `QTableView`:表格视图,类似电子表格
- **特点**:
  - 与Model-View架构紧密结合
  - 支持自定义模型和委托
- **适用场景**:文件浏览器、配置树、数据表格展示
2.10 QTimer
- **功能**:定时器类,用于执行周期性或延迟操作。
- **特点**:
  - 支持单次触发和周期性触发
  - 高精度定时(毫秒级)
  - 可与事件循环无缝集成
- **常用信号**:`timeout()`
- **适用场景**:
  - 动画控制
  - 周期性数据刷新
  - 延迟操作(如防抖)
  - 后台任务调度
2.11 QGraphicsView/QGraphicsScene/QGraphicsItem
- **功能**:2D图形视图框架,用于创建复杂的图形场景。
- **组成**:
  - `QGraphicsScene`:管理图形项的容器
  - `QGraphicsView`:显示场景的视口
  - `QGraphicsItem`:场景中的基本图形元素
- **特点**:
  - 支持缩放、旋转、平移
  - 高效处理大量图形项
  - 支持碰撞检测、动画
- **适用场景**:绘图软件、图表、游戏、自定义UI组件
2.12 QTabWidget
- **功能**:标签页控件,用于组织多个页面。
- **特点**:
  - 支持添加、删除、重命名标签页
  - 可设置标签位置(上、下、左、右)
  - 支持拖拽重新排序
- **常用方法**:`addTab()`, `removeTab()`, `setCurrentIndex()`
- **适用场景**:多页面应用、配置对话框、文档编辑器
2.13 QStackedWidget
- **功能**:堆叠式控件,一次只显示一个子控件。
- **特点**:
  - 与`QTabWidget`配合使用实现标签页效果
  - 可编程切换当前显示的页面
  - 节省内存和界面空间
- **常用信号**:`currentChanged()`
- **适用场景**:向导对话框、多步骤操作、动态界面切换
2.14 QSplitter
- **功能**:分割窗口,允许用户调整子控件大小。
- **特点**:
  - 支持水平和垂直分割
  - 用户可拖动分割条调整比例
  - 自动保存和恢复分割状态
- **适用场景**:IDE界面、文件管理器、多面板应用
2.14 QStatusBar
## 5. **QStatusBar**
- **功能**:状态栏,位于主窗口底部,显示状态信息。
- **特点**:
  - 可添加永久部件(如版本信息)和临时部件(如鼠标悬停提示)
  - 支持进度条、标签等控件
  - 与`QMainWindow`集成良好
- **常用方法**:`showMessage()`, `addPermanentWidget()`
- **适用场景**:显示操作状态、进度提示、系统信息
2.15 QToolBar
- **功能**:工具栏,提供常用操作的快捷按钮。
- **特点**:
  - 可停靠在窗口四周
  - 支持图标、文本、下拉菜单
  - 可拖拽重新排列
- **适用场景**:常用功能快捷访问、应用程序导航
2.16 QMenuBar/QMenu
- **功能**:菜单栏和菜单,组织应用程序功能。
- **特点**:
  - `QMenuBar`:主窗口顶部的菜单容器
  - `QMenu`:下拉菜单,可包含动作、子菜单
  - 支持快捷键、图标、复选标记
- **适用场景**:功能分类、系统设置、文件操作
2.17 QFileDialog
- **功能**:文件对话框,用于选择文件或目录。
- **特点**:
  - 平台原生外观
  - 支持过滤器、多选、保存/打开模式
  - 可自定义界面
- **静态方法**:`getOpenFileName()`, `getSaveFileName()`, `getExistingDirectory()`
- **适用场景**:文件导入/导出、配置文件选择
2.18 QColorDialog / QFontDialog / QInputDialog
- **功能**:标准对话框,用于选择颜色、字体、输入值。
- **特点**:
  - 平台一致性
  - 简化常见交互
  - 可自定义选项
- **适用场景**:
  - `QColorDialog`:颜色选择
  - `QFontDialog`:字体设置
  - `QInputDialog`:简单值输入(文本、整数、浮点数、项目选择)
2.19 QSettings
- **功能**:持久化应用程序设置。
- **特点**:
  - 跨平台(Windows注册表、macOS plist、Linux INI文件)
  - 支持分组、类型安全
  - 自动同步
- **常用方法**:`setValue()`, `value()`, `beginGroup()`, `endGroup()`
- **适用场景**:保存用户偏好、窗口位置、最近文件列表
2.19 QThread / QRunnable / QThreadPool
- **功能**:多线程支持,用于执行耗时操作避免界面卡顿。
- **特点**:
  - `QThread`:线程控制对象,可继承重写`run()`方法
  - `QRunnable`:轻量级任务接口,配合`QThreadPool`使用
  - `QThreadPool`:线程池管理,自动复用线程资源
- **适用场景**:
  - 文件读写
  - 网络请求
  - 图像处理
  - 数据计算
- **注意**:避免在子线程直接操作GUI组件,应通过信号槽通信
2.20 QFuture / QFutureWatcher
- **功能**:异步操作结果管理,基于Qt Concurrent框架。
- **特点**:
  - `QFuture`:表示一个可能还未完成的计算结果
  - `QFutureWatcher`:监控`QFuture`状态变化,可与信号槽集成
  - 支持取消、暂停、进度查询
- **适用场景**:
  - 长时间计算任务
  - 后台数据处理
  - 进度条更新
  - 异步UI响应
2.21 QStateMachine / QState / QSignalTransition
- **功能**:有限状态机框架,用于管理复杂的状态转换逻辑。
- **特点**:
  - 可视化状态转换
  - 支持嵌套状态、并行状态
  - 通过信号触发状态转移
  - 可添加进入/退出状态的动画或操作
- **适用场景**:
  - 复杂UI状态管理(如向导、游戏)
  - 工作流控制
  - 设备状态监控
2.22 QPropertyAnimation
- **功能**:属性动画类,实现平滑的视觉效果。
- **特点**:
  - 可对任意QObject的属性进行动画
  - 支持缓动函数(Easing Curves)
  - 可组合多个动画(QParallelAnimationGroup, QSequentialAnimationGroup)
- **常用属性动画**:
  - `pos`:位置移动
  - `geometry`:大小和位置变化
  - `opacity`:透明度
  - `rotation`:旋转
- **适用场景**:界面过渡、按钮反馈、动态效果
2.23 QFileSystemWatcher
- **功能**:监视文件或目录的变化。
- **特点**:
  - 跨平台文件系统事件监听
  - 支持文件创建、删除、修改、重命名等事件
  - 资源占用低
- **常用信号**:`fileChanged()`, `directoryChanged()`
- **适用场景**:
  - 实时日志查看器
  - 配置文件热加载
  - 文件同步工具
  - 资源管理器
2.24 QShortcut
- **功能**:键盘快捷键支持。
- **特点**:
  - 支持标准快捷键(如Ctrl+C, F1)
  - 可自定义组合键
  - 与动作(QAction)关联
  - 支持上下文敏感快捷键
- **适用场景**:
  - 提高操作效率
  - 标准化用户交互
  - 辅助功能支持
2.25 QDataWidgetMapper
- **功能**:将数据模型中的单条记录映射到一组编辑控件。
- **特点**:
  - 自动同步模型数据和界面控件
  - 支持导航(上一条、下一条)
  - 减少手动数据绑定代码
- **适用场景**:
  - 表单编辑界面
  - 数据库记录浏览
  - 配置项编辑器
2.26 QStyledItemDelegate / QItemDelegate
- **功能**:自定义视图中项目的显示和编辑方式。
- **区别**:
  - `QStyledItemDelegate`:使用当前样式绘制,推荐使用
  - `QItemDelegate`:传统绘制方式
- **可重写方法**:
  - `paint()`:自定义绘制
  - `sizeHint()`:自定义大小
  - `createEditor()`:自定义编辑控件
- **适用场景**:
  - 自定义表格单元格
  - 进度条、星级评分等特殊显示
  - 复合控件编辑
2.27 QHelpEngine
- **功能**:集成帮助系统支持。
- **特点**:
  - 基于Qt Help Framework
  - 支持搜索、书签、内容导航
  - 可打包帮助文档(.qch文件)
- **适用场景**:
  - 应用程序内置帮助
  - 用户手册集成
  - API文档查看器
2.28 QOpenGLWidget
- **功能**:OpenGL绘图区域,用于高性能3D图形渲染。
- **特点**:
  - 继承自QWidget,可与其他Qt控件混合使用
  - 支持现代OpenGL(3.2+ Core Profile)
  - 自动处理上下文创建、双缓冲等
- **关键方法**:
  - `initializeGL()`:初始化OpenGL资源
  - `resizeGL()`:处理窗口大小变化
  - `paintGL()`:执行渲染操作
- **适用场景**:
  - 3D可视化
  - 游戏开发
  - 科学计算图形
  - 视频处理

三、系统与网络相关

3.01 QProcess
- **功能**:启动外部程序并与其通信。
- **特点**:
  - 可启动控制台或GUI应用程序
  - 支持读取标准输出/错误,写入标准输入
  - 可设置工作目录、环境变量
  - 跨平台进程管理
- **常用信号**:`started()`, `finished()`, `readyReadStandardOutput()`
- **适用场景**:
  - 调用系统命令(如ping, git)
  - 集成第三方工具
  - 执行批处理任务
3.02 QHostInfo
- **功能**:执行DNS主机名查找。
- **特点**:
  - 支持同步和异步查询
  - 可获取主机名对应的IP地址列表
  - 反向查询IP地址对应的主机名
- **常用静态方法**:`lookupHost()`, `fromName()`
- **适用场景**:
  - 网络连接前的地址解析
  - 网络诊断工具
  - 多IP设备支持
3.03 QUdpSocket
- **功能**:UDP协议网络通信。
- **特点**:
  - 无连接、低延迟的数据传输
  - 支持单播、广播、组播
  - 适用于实时性要求高的场景
- **常用方法**:`writeDatagram()`, `readDatagram()`, `bind()`
- **适用场景**:
  - 实时音视频传输
  - 网络发现协议
  - 游戏状态同步
  - 物联网设备通信
3.04 QTcpServer/QTcpSocket
- **功能**:TCP协议服务器和客户端通信。
- **特点**:
  - `QTcpServer`:监听端口,接受客户端连接
  - `QTcpSocket`:建立连接,进行可靠的数据传输
  - 基于事件驱动,非阻塞I/O
- **常用信号**:`newConnection()`, `readyRead()`, `disconnected()`
- **适用场景**:
  - 客户端-服务器架构
  - 文件传输
  - 远程控制
  - 数据同步服务
3.05 QNetworkConfigurationManager
- **功能**:管理网络配置和连接状态。
- **特点**:
  - 检测网络可达性
  - 监听网络状态变化(在线/离线)
  - 支持多种网络接口(Wi-Fi, 以太网, 移动网络)
- **常用信号**:`onlineStateChanged()`, `configurationChanged()`
- **适用场景**:
  - 网络状态感知应用
  - 自动重连机制
  - 流量敏感功能控制
3.06 QTemporaryFile/QTemporaryDir
- **功能**:创建临时文件和目录。
- **特点**:
  - 自动选择安全的临时路径
  - 程序退出时自动清理
  - 可设置文件名模板
- **适用场景**:
  - 缓存下载内容
  - 中间数据处理
  - 文件格式转换
  - 安全的临时存储
3.06 QDir/QFileInfo
- **功能**:文件系统目录和文件信息操作。
- **特点**:
  - `QDir`:目录遍历、创建、删除、过滤
  - `QFileInfo`:获取文件属性(大小、权限、时间戳等)
  - 跨平台路径处理
- **常用方法**:
  - `QDir::entryList()`, `mkdir()`, `removeRecursively()`
  - `QFileInfo::size()`, `lastModified()`, `isDir()`
- **适用场景**:
  - 文件管理器
  - 资源扫描
  - 数据备份
  - 系统监控
3.06 QCryptographicHash
- **功能**:生成数据的加密哈希值。
- **支持算法**:
  - MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512
- **特点**:
  - 增量哈希计算(适合大文件)
  - 简单易用的接口
- **常用方法**:`addData()`, `result()`, `hash()`
- **适用场景**:
  - 文件完整性校验
  - 密码存储(配合盐值)
  - 数据指纹生成
  - 数字签名基础
3.06 QJsonDocument/QJsonObject/QJsonArray
- **功能**:JSON数据解析和生成。
- **特点**:
  - 轻量级、高性能的JSON处理
  - 支持DOM模式操作
  - 自动格式化和压缩输出
- **常用方法**:
  - `QJsonDocument::fromJson()`, `toJson()`
  - `QJsonObject::insert()`, `value()`
  - `QJsonArray::append()`, `at()`
- **适用场景**:
  - 配置文件读写
  - Web API交互
  - 数据序列化
  - 日志格式化
3.06 QRegularExpression
- **功能**:正则表达式匹配和替换。
- **特点**:
  - 支持Perl兼容正则语法
  - 高性能模式匹配
  - 支持捕获组、命名捕获
  - 可设置匹配选项(大小写敏感、多行模式等)
- **常用方法**:`match()`, `isValid()`, `pattern()`
- **适用场景**:
  - 文本验证(邮箱、电话号码)
  - 日志分析
  - 数据提取
  - 字符串处理和转换

四、多媒体

4.01 QMediaPlayer/QVideoWidget
- **功能**:音频和视频播放支持。
- **特点**:
  - `QMediaPlayer`:控制媒体播放(播放、暂停、停止、音量)
  - `QVideoWidget`:显示视频画面(可集成到QWidget中)
  - 支持多种格式(依赖后端,如Windows Media Foundation, GStreamer)
  - 可获取播放状态、时长、位置
- **常用信号**:`positionChanged()`, `durationChanged()`, `stateChanged()`
- **适用场景**:
  - 音视频播放器
  - 监控系统
  - 多媒体演示应用
4.02 QCamera/QMediaCaptureSession
- **功能**:摄像头访问和图像捕获。
- **特点**:
  - `QCamera`:管理摄像头设备
  - `QMediaCaptureSession`:配置媒体捕获流程(预览、图像、音频输出)
  - 支持设置分辨率、帧率等参数
  - 可与`QVideoWidget`或自定义`QVideoSink`结合使用
- **适用场景**:
  - 视频通话应用
  - 扫码识别
  - 拍照功能
  - 实时图像处理
4.03 QSoundEffect
- **功能**:播放短小的音频效果文件。
- **特点**:
  - 低延迟播放(适合游戏音效、提示音)
  - 支持循环播放
  - 可调节音量
  - 比`QMediaPlayer`更轻量
- **常用方法**:`play()`, `setSource()`, `setVolume()`
- **适用场景**:
  - 用户操作反馈音效
  - 游戏中的爆炸、点击声
  - 系统提示音
4.04 QScroller
- **功能**:为任何`QAbstractScrollArea`子类或启用了触摸的控件添加平滑滚动支持。
- **特点**:
  - 支持触摸拖拽、惯性滚动
  - 可自定义滚动效果(速度、加速度)
  - 跨平台一致的滚动体验
- **常用方法**:`grabGesture()`, `setScrollerProperties()`
- **适用场景**:
  - 移动端应用
  - 大型列表/表格的流畅浏览
  - 自定义控件的触摸支持
4.05 QToolTip
- **功能**:显示工具提示信息。
- **特点**:
  - 鼠标悬停时弹出简短说明
  - 支持富文本(HTML)
  - 可编程显示和隐藏
  - 自动定位和样式
- **常用静态方法**:`showText()`, `hideText()`
- **适用场景**:
  - 按钮功能说明
  - 表单字段提示
  - 复杂控件的使用指导
4.06 QWhatsThis
- **功能**:提供"这是什么?"帮助模式。
- **特点**:
  - 用户点击问号按钮或按Shift+F1进入帮助模式
  - 点击控件显示详细的上下文帮助
  - 通常与`QAction::setWhatsThis()`配合使用
- **常用静态方法**:`enterWhatsThisMode()`
- **适用场景**:
  - 复杂界面的功能解释
  - 新用户引导
  - 技术性较强的应用程序
4.07 QDrag / QMimeData
- **功能**:实现拖放(Drag and Drop)操作。
- **特点**:
  - `QMimeData`:封装拖放的数据和元信息(如文本、URL、图像)
  - `QDrag`:启动拖放操作
  - 控件需重写`dragEnterEvent()`, `dragMoveEvent()`, `dropEvent()`来支持放置
- **适用场景**:
  - 文件从资源管理器拖入应用
  - 列表项重新排序
  - 图像上传
  - 自定义数据交换
4.08 QPainter/QPainterPath
- **功能**:2D图形绘制引擎。
- **特点**:
  - `QPainter`:执行绘制操作(线条、形状、文本、图像)
  - `QPainterPath`:创建复杂的矢量路径(可包含直线、曲线、文本轮廓)
  - 可在`QWidget::paintEvent()`、`QImage`、`QPrinter`等多种设备上绘图
  - 支持抗锯齿、渐变填充、变换(旋转、缩放)
- **适用场景**:
  - 自定义控件绘制
  - 数据可视化(图表、仪表盘)
  - 图形编辑器
  - 打印输出
4.09 QClipboard
- **功能**:系统剪贴板访问。
- **特点**:
  - 支持文本、图像、HTML、自定义MIME类型数据
  - 可监听剪贴板内容变化
  - 跨应用程序数据共享
- **常用方法**:`setText()`, `text()`, `setImage()`, `image()`
- **适用场景**:
  - 复制粘贴功能
  - 截图工具
  - 数据导入导出
  - 快捷操作
4.10 QFontDatabase
- **功能**:查询和管理系统字体。
- **特点**:
  - 获取系统安装的所有字体族名称
  - 查询特定字体的样式(常规、粗体、斜体等)
  - 检查字体是否支持特定字符
  - 动态加载字体文件(`.ttf`, `.otf`)
- **常用方法**:`families()`, `styles()`, `isBitmapScalable()`, `addApplicationFont()`
- **适用场景**:
  - 字体选择对话框
  - 文本编辑器
  - 国际化应用的字体适配
  - 自定义UI主题

五、数据与模型

5.01 QAbstractItemModel
- **功能**:所有项视图模型的抽象基类。
- **特点**:
  - 定义了视图(如`QListView`, `QTableView`)与数据之间的标准接口
  - 需要子类化并实现关键虚函数(`rowCount()`, `columnCount()`, `data()`, `headerData()`等)
  - 支持树形、表格等多种数据结构
  - 通过`modelChanged()`等信号通知视图数据更新
- **适用场景**:
  - 自定义数据源绑定
  - 复杂数据结构的展示(如嵌套JSON、XML)
  - 高性能大数据集显示
5.02 QStringListModel
- **功能**:字符串列表的简单模型实现。
- **特点**:
  - 轻量级,用于存储和显示一维字符串列表
  - 直接与`QListView`, `QComboBox`等控件配合使用
  - 支持动态添加、删除、修改字符串
- **常用方法**:`setStringList()`, `stringList()`, `insertRows()`, `removeRows()`
- **适用场景**:
  - 显示文件名列表
  - 历史记录
  - 简单的选项列表
  - 自动补全建议
5.03 QStandardItemModel
- **功能**:通用的分层数据模型,基于`QStandardItem`。
- **特点**:
  - 无需子类化即可使用的灵活模型
  - 支持树形和表格结构
  - 每个`QStandardItem`可存储数据、文本、图标、复选状态等
  - 内置对拖放、排序的支持
- **适用场景**:
  - 配置树形结构
  - 临时数据展示
  - 快速原型开发
  - 不需要高性能的中小型数据集
5.04 QSortFilterProxyModel
- **功能**:为源模型提供排序和过滤功能。
- **特点**:
  - 不修改原始数据,只改变视图呈现
  - 支持按列排序、字符串过滤(通配符、正则表达式)
  - 可链式使用(多个代理模型叠加)
  - 可重写`filterAcceptsRow()`实现自定义过滤逻辑
- **适用场景**:
  - 表格数据搜索
  - 列表动态筛选
  - 多级排序
  - 实时数据过滤(如输入框联动)
5.05 QFileSystemModel
- **功能**:专门用于展示文件系统结构的模型。
- **特点**:
  - 自动与`QTreeView`等视图集成
  - 支持延迟加载(目录展开时才读取内容)
  - 提供文件名、大小、类型、时间等标准列
  - 可设置根路径、过滤器(如只显示图片)
- **常用方法**:`setRootPath()`, `filePath()`, `isDir()`
- **适用场景**:
  - 文件浏览器
  - 资源选择器
  - 目录监控工具
  - 项目管理器
5.06 QSqlQueryModel/QSqlTableModel/QSqlRelationalTableModel
- **功能**:数据库查询结果的模型封装。
- **区别**:
  - `QSqlQueryModel`:只读模型,支持任意SQL查询
  - `QSqlTableModel`:可编辑模型,对应单个数据库表
  - `QSqlRelationalTableModel`:支持外键关联的可编辑模型
- **特点**:
  - 自动与数据库同步
  - 减少手动数据读写代码
  - 支持字段映射、排序
- **适用场景**:
  - 数据库管理工具
  - CRM/ERP系统
  - 数据录入界面
  - 报表系统
5.07 QIdentityProxyModel
- **功能**:简单的代理模型,用于在源模型和视图之间插入一个"透明"层。
- **特点**:
  - 默认行为是直接转发所有调用
  - 可重写方法以修改行/列映射、数据转换等
  - 是构建更复杂代理模型的基础
- **适用场景**:
  - 数据格式转换(如日期格式化)
  - 列顺序重排
  - 为不可修改的源模型添加功能层
5.08 QItemSelectionModel
- **功能**:管理视图中项的选择状态。
- **特点**:
  - 与`QAbstractItemView`和`QAbstractItemModel`协同工作
  - 跟踪当前项、选中项、高亮项
  - 支持多种选择模式(单选、多选、扩展等)
  - 通过信号(`selectionChanged()`)响应选择变化
- **适用场景**:
  - 实现"当前行"高亮
  - 批量操作(删除、复制选中项)
  - 上下文菜单启用/禁用控制
  - 数据关联显示(选中A项,显示B项详情)
5.09 QConcatenateTablesProxyModel
- **功能**:将多个源模型的内容串联成一个连续的列表。
- **特点**:
  - 水平拼接多个表格或列表模型
  - 视图为一个整体,但保持各模型的独立性
  - 适用于需要合并不同类型数据源的场景
- **适用场景**:
  - 合并多个数据表
  - 分页数据的无缝连接
  - 不同来源的列表整合(如本地+云端文件)
5.10 QTransposeProxyModel
- **功能**:将源模型的行和列进行转置(行列互换)。
- **特点**:
  - 改变数据的呈现维度
  - 不修改原始数据
  - 适用于需要从"记录式"视图转为"字段式"视图的场景
- **适用场景**:
  - 数据透视表
  - 配置项编辑(每行一个字段)
  - 特定格式的报表生成
  - 与特定布局需求的视图配合使用

六、工具与辅助

6.01 QElapsedTimer
- **功能**:高精度时间测量,用于性能分析和耗时计算。
- **特点**:
  - 基于系统高性能计数器,精度远高于`QTimer`
  - 支持毫秒、微秒级计时
  - 可跨平台提供一致的计时结果
  - 自动处理系统时钟调整的影响
- **常用方法**:`start()`, `restart()`, `elapsed()`, `hasExpired()`
- **适用场景**:
  - 函数执行时间 profiling
  - 算法性能测试
  - 超时检测
  - 动画帧率控制
6.02 QDeadlineTimer
- **功能**:基于截止时间的定时器,用于管理超时操作。
- **特点**:
  - 比使用`QElapsedTimer` + 计算更简洁安全
  - 支持无限等待、固定超时
  - 可查询剩余时间
  - 与事件循环集成良好
- **常用方法**:`hasExpired()`, `remainingTime()`, `setRemainingTime()`
- **适用场景**:
  - 网络请求超时
  - 资源锁定超时
  - 阻塞操作的安全等待
  - 后台任务的最大执行时间限制
6.03 QScopeGuard
- **功能**:RAII(资源获取即初始化)模式的辅助类,确保代码块退出时执行清理操作。
- **特点**:
  - 在栈上创建,析构时自动调用指定的可调用对象(lambda, 函数指针等)
  - 保证异常安全和正常退出时都能执行清理
  - 避免资源泄漏
- **适用场景**:
  - 文件句柄关闭
  - 互斥锁释放
  - 内存清理
  - 状态恢复(如光标重置)
6.04 QSignalBlocker
- **功能**:临时阻止对象的信号发射。
- **特点**:
  - RAII风格,构造时阻塞,析构时自动恢复
  - 避免信号-槽循环触发
  - 比手动调用`blockSignals()`更安全(异常安全)
- **常用方法**:构造函数接受`QObject*`,析构自动解除阻塞
- **适用场景**:
  - 更新UI控件时不触发其`valueChanged()`等信号
  - 批量设置属性避免频繁响应
  - 初始化阶段防止意外的信号处理
6.05 QSaveFile
- **功能**:安全的文件写入,确保写入过程不会破坏原文件。
- **特点**:
  - 先写入临时文件,成功后再原子性地重命名为目标文件
  - 防止因程序崩溃或断电导致的数据丢失
  - 继承自`QFile`,接口兼容
- **关键方法**:`commit()`(完成写入并重命名),`cancelWriting()`(取消)
- **适用场景**:
  - 配置文件保存
  - 文档编辑器的保存功能
  - 重要数据持久化
  - 任何需要"全有或全无"写入语义的场景
6.06 QVersionNumber
- **功能**:版本号的表示和比较。
- **特点**:
  - 解析和格式化版本字符串(如 "1.2.3", "2.0.0-beta")
  - 支持语义化版本(SemVer)比较(`<`, `>`, `==`)
  - 可提取主版本、次版本、修订号
- **常用方法**:`fromString()`, `toString()`, 比较运算符
- **适用场景**:
  - 软件版本检查
  - 插件兼容性验证
  - API版本管理
  - 自动更新系统
6.07 QUrlQuery
- **功能**:解析和构建URL查询字符串(即?后面的部分)。
- **特点**:
  - 与`QUrl`配合使用,方便地操作查询参数
  - 支持添加、删除、修改键值对
  - 自动处理URL编码/解码
- **常用方法**:`addQueryItem()`, `queryItems()`, `setQuery()`, `setQueryDelimiters()`
- **适用场景**:
  - 构造Web API请求参数
  - 解析HTTP GET请求
  - 生成带参数的链接
  - OAuth等认证流程
6.08 QMessageAuthenticationCode (HMAC)
- **功能**:生成消息认证码(如HMAC-SHA256),用于验证数据完整性和真实性。
- **特点**:
  - 使用密钥对数据进行哈希,防止篡改
  - 常见于API签名、安全令牌生成
  - 比普通哈希更安全
- **常用方法**:`hash()`, `reset()`, `addData()`
- **适用场景**:
  - Webhook签名验证
  - API请求签名
  - 安全令牌(JWT等)的基础
  - 下载文件的完整性校验(带密钥)
6.09 QTimeZone
- **功能**:时区信息处理。
- **特点**:
  - 表示全球不同时区(如"Asia/Shanghai", "America/New_York")
  - 支持夏令时转换
  - 与`QDateTime`无缝集成进行时区转换
  - 可获取时区偏移量、缩写
- **常用方法**:`availableTimeZoneIds()`, `displayName()`, `offsetFromUtc()`
- **适用场景**:
  - 国际化应用的时间显示
  - 日志时间戳标准化
  - 跨时区会议安排
  - 数据同步的时间一致性
6.10 QSemaphore/QMutex/QWaitCondition
- **功能**:线程同步原语。
- **区别**:
  - `QMutex`:互斥锁,保护共享资源,一次只允许一个线程访问
  - `QSemaphore`:信号量,更通用的计数锁,允许多个线程同时访问(数量可控)
  - `QWaitCondition`:条件变量,允许线程在某个条件满足前挂起,常与`QMutex`配合使用
- **特点**:
  - 低级别的线程控制工具
  - 实现复杂的线程协作逻辑
  - 必须小心使用以避免死锁
- **适用场景**:
  - `QMutex`:保护共享变量、缓存
  - `QSemaphore`:数据库连接池、线程池大小控制
  - `QWaitCondition`:生产者-消费者模式、任务队列

七、国际化语言

7.01 QTranslator
- **功能**:加载和应用翻译文件(`.qm`),实现应用程序的多语言支持。
- **特点**:
  - 从`.qm`文件(由`lupdate`和`lrelease`工具链生成)加载翻译
  - 可同时加载多个翻译文件(如基础翻译、模块翻译)
  - 与`tr()`宏配合使用,动态切换界面语言
  - 支持按上下文(context)和注释(comment)精确匹配翻译
- **常用方法**:`load()`, `isEmpty()`
- **适用场景**:
  - 多语言用户界面
  - 国际化软件发布
  - 动态语言切换功能
7.02 QLocale
- **功能**:表示特定区域的格式约定,如数字、日期、货币的显示方式。
- **特点**:
  - 封装了语言、国家、书写系统等信息(如`zh_CN`, `en_US`, `de_DE`)
  - 提供格式化和解析数字、日期时间、货币的方法
  - 尊重用户系统区域设置
  - 支持文化敏感的字符串比较(排序)
- **常用方法**:`toString()`, `toDouble()`, `dateFormat()`, `system()`
- **适用场景**:
  - 本地化数据显示
  - 财务软件的货币格式
  - 日历和日程应用
  - 全球化数据处理
7.03 QRegularExpressionValidator
- **功能**:基于正则表达式的输入验证器,用于`QLineEdit`等输入控件。
- **特点**:
  - 将复杂的输入规则(如邮箱、电话、身份证号)封装为正则表达式
  - 实时验证用户输入,控制输入框状态(有效/无效)
  - 比手动验证更简洁、高效
- **常用方法**:构造函数接受`QRegularExpression`,`setRegularExpression()`
- **适用场景**:
  - 表单数据校验
  - 防止非法输入
  - 提升用户体验(即时反馈)
7.04 QDoubleValidator/QIntValidator
- **功能**:限制`QLineEdit`只能输入指定范围内的浮点数或整数。
- **特点**:
  - `QDoubleValidator`:验证双精度浮点数,可设置范围和小数位数
  - `QIntValidator`:验证整数,设置最小最大值
  - 自动过滤非法字符(如字母)
  - 与`QSpinBox`功能类似,但用于文本输入框
- **适用场景**:
  - 数值参数输入
  - 配置项编辑
  - 科学计算界面
  - 游戏设置(如分辨率、音量)
7.05 QFileSystemWatcher/QIntValidator
- **功能**:监视文件或目录的变化(创建、删除、修改、重命名)。
- **特点**:
  - 跨平台文件系统事件监听
  - 资源占用低,响应及时
  - 支持添加/移除监视路径
- **常用信号**:`fileChanged(const QString&)`, `directoryChanged(const QString&)`
- **适用场景**:
  - 实时日志查看器
  - 配置文件热重载
  - 文件同步工具
  - 资源管理器
7.06 QCryptographicHash
- **功能**:生成数据的加密哈希值(如MD5, SHA-1, SHA-256)。
- **特点**:
  - 支持多种标准哈希算法
  - 可增量计算(适合大文件)
  - 输出为十六进制字符串或字节数组
- **常用方法**:`addData()`, `result()`, `reset()`, 静态`hash()`
- **适用场景**:
  - 文件完整性校验
  - 密码存储(配合盐值)
  - 数据指纹生成
  - 数字签名基础
7.07 QUrlQuery
- **功能**:解析和构建URL的查询字符串部分(`?key=value&...`)。
- **特点**:
  - 与`QUrl`完美集成
  - 自动处理URL编码/解码
  - 支持重复键(多个同名参数)
- **常用方法**:`addQueryItem()`, `queryItems()`, `setQuery()`, `hasQueryItem()`
- **适用场景**:
  - 构造Web API请求
  - 解析HTTP GET参数
  - 生成带参数的链接
  - OAuth等认证流程
7.08 QDesktopServices
- **功能**:访问系统级桌面服务。
- **特点**:
  - 打开URL(网页、邮件、文件)
  - 启动外部应用程序
  - 访问标准目录(如文档、桌面、音乐)
- **常用静态方法**:
  - `openUrl(QUrl)`:打开网页、文件、mailto链接等
  - `storageLocation(StandardLocation)`:获取系统标准路径
- **适用场景**:
  - "帮助"菜单中的"访问官网"
  - "关于"对话框中的"发送邮件"
  - 打开用户文档目录
  - 集成系统功能
7.09 QMetaObject::invokeMethod()
- **功能**:在对象的线程上下文中安全地调用其槽函数或可调用方法。
- **特点**:
  - 线程间通信的关键工具(如从子线程更新UI)
  - 支持同步(BlockingQueuedConnection)和异步(QueuedConnection)调用
  - 可传递参数(需注册到元对象系统)
  - 避免跨线程直接调用GUI方法导致的崩溃
- **参数说明**:
  - `obj`: 目标对象
  - `method`: 方法名(字符串)
  - `connectionType`: 连接类型
  - `returnvalue`, `valist`: 参数列表
- **适用场景**:
  - 子线程完成任务后通知主线程更新UI
  - 延迟执行(配合`Qt::QueuedConnection`)
  - 安全的跨线程调用
posted @ 2018-06-22 10:44  osbreak  阅读(166)  评论(0)    收藏  举报