审查、审计或核查代码,通常意味着要分别运行代码检查工具(linter)、逐条查阅检查清单,并在数十个文件中手动验证 Qt 特有的代码模式。作为 Qt AI 驱动的开发工具 的重要补充,Qt 代码审查技能可以帮助开发者自动完成审查环节的部分工作。借助 AI 智能体先运行确定性 linter、再并行调度六个深度分析智能体,开发者不必再逐个文件手动排查,几分钟内即可获得附带修复建议的真实问题清单。
AI 驱动的代码审查,结果可靠
这些审查技能背后的原则很简单:linter 具有权威性,智能体不会对其结论提出质疑;只有置信度超过 80/100 的发现才会作为确认问题上报;且这些技能均为只读操作,不会修改代码。
视频:Qt C++ 代码审查技能在 Claude Code CLI 中的实际运行演示(部分片段经过剪辑与加速处理)
Qt C++ 审查技能针对 Qt6 C++ 源文件与头文件;QML 审查技能针对 Qt6 QML 文件,并可选择性调用系统的 qmllint 进行类型级检查。两项技能均可作用于单次提交(commit)、单个目录或整个项目,且共享一套三阶段分析架构。
两项审查技能,同一套架构
两项审查技能均针对 Qt6 源代码:C++ 审查技能作用于 .cpp、.h 与 .hpp 文件;QML 审查技能作用于 .qml 文件,并可选择性调用系统 qmllint 进行类型级检查。两者都可审查单次提交、单个目录或整个项目,且共享同一套三阶段处理流程。
代码审查技能何时被触发?
只要开发者要求审查、检查、审计或核查代码——或是在提交(commit)前被提醒需要这样做——AI 智能体就会调用 Qt 代码审查技能。诸如 "review my changes"(审查我的改动)、"audit the module"(审计这个模块)、"check this before I push"(推送前检查一下),或者简单一句 "code review"(代码审查),都足以触发该技能。这些技能还会判断用户意图范围是狭窄的(仅审查 diff 或特定提交)还是宽泛的(审查整个目录或完整代码库),并据此调整审查范围。
Qt 代码审查技能详解
一旦被触发,这些技能便会接管原本需要开发者分别运行 linter、查阅检查清单、并在数十个文件中手动推敲 Qt 特有细微模式的整套工作流程。以下是各步骤的具体运作方式。
第一步——范围识别
该技能首先确定审查范围。如果开发者说 "this commit"(这次提交),它会执行 git diff HEAD~1..HEAD;如果说 "my changes"(我的改动),则会合并未暂存与已暂存的 diff。无论哪种情况,它都会审查改动行以及前后各 ±50 行的上下文,并且只报告落在改动行范围内的问题。如果开发者指定了某个文件、目录或整个项目,它会在该范围内匹配所有 .cpp、.h 和 .hpp 文件(C++ 技能)或所有 .qml 文件(QML 技能)。

第二步——确定性代码检查(Deterministic Linting)
Python linter 采用单次遍历(single-pass)方式,对范围内的全部文件进行检查。C++ linter 内置了 60 余项可机械检测的规则,涵盖 include 顺序、废弃类使用、反模式(anti-pattern)、QAbstractItemModel 契约违规、错误处理、生命周期、API 命名、头文件、超时处理、条件语句、值类型(value-class)规范以及三元运算符风格等类别。
QML linter 内置了 47 余项检查,涵盖 import 顺序、属性顺序、属性绑定(property binding)、布局与锚定(anchoring)、Loader 模式、delegate 安全性、States、图片加载、性能反模式、代码风格规范、信号处理函数(signal handler)语法、错误与安全模式(如硬编码 http://、不可移植路径)以及 JavaScript 风格。两个 linter 均具确定性与权威性——其输出结果将直接进入下一步骤,智能体不会再对其提出异议。

第二步 b——系统 qmllint(仅限 QML 技能)
在 Python linter 运行完成后,若系统 PATH 中可找到 qmllint,QML 技能会选择性地以 JSON 输出格式运行系统 qmllint。qmllint 在类型级检查方面具有权威性——包括未解析类型、不兼容的属性赋值以及别名(alias)循环;而 Python linter 则覆盖 qmllint 无法检测的风格、顺序与性能模式。两者的输出结果会被合并并去重。

第三步——六个并行的深度分析智能体
以 linter 输出结果作为上下文,六个专项智能体会并行启动。每个智能体都有明确的职责范围与特定的检查清单,不会重复 linter 已经标记过的问题。
Qt C++ 技能中的六个智能体分工如下:
-
模型契约(Model Contracts)——QAbstractItemModel 信号协议、角色(role)系统、索引有效性以及代理模型(proxy model)正确性。
-
所有权与生命周期(Ownership & Lifecycle)——内存所有权、父子对象关系、资源清理、五法则(Rule of Five)以及 RAII 正确性。
-
线程安全(Thread Safety)——跨线程 QObject 访问、互斥锁(mutex)一致性以及工作线程中的信号发射。
-
API、命名与 C++ 正确性(API, Naming & C++ Correctness)——Qt 命名规范、const 正确性、移动语义(move semantics)、枚举(enum)规范以及 noexcept 正确性。
-
错误处理与校验(Error Handling & Validation)——QFile、QJsonDocument、QNetworkReply、SSL 以及用户输入中缺失的错误检查。
-
性能与代码质量(Performance & Code Quality)——算法反模式、不必要的拷贝、写时复制(COW)分离(detach)陷阱、死代码、魔法数字(magic number)、复制粘贴的逻辑、过期缓存,以及不确定的迭代顺序。

QML 技能中的六个智能体分工如下:
-
绑定与属性(Bindings & Properties)——多重循环绑定(binding loop)、别名(alias)链、未限定的属性访问、缺失的 readonly 声明,以及 pragma ComponentBehavior: Bound 的覆盖情况。
-
布局与锚定(Layout & Anchoring)——锚定到不可见项目、跨分支锚定、模糊的 Layout 尺寸设置,以及缺失的填充策略(fill policy)。
-
组件加载与生命周期(Component Loading & Lifecycle)——Loader 模式、动态对象创建导致的泄漏、Connections 的生命周期,以及与 C++ 集成的正确性。
-
ListView 与 Delegate 正确性(ListView & Delegate Correctness)——required 属性模式、delegate 复用安全性、滚动性能,以及已知的 Qt delegate 缺陷。
-
状态、过渡与结构(States, Transitions & Structure)——PropertyChanges 的正确性、过渡(transition)覆盖情况、StateGroup 的使用,以及 Qt 5 → 6 迁移模式(Binding.restoreMode、Connections 处理函数语法、QtGraphicalEffects → MultiEffect)。
-
性能与代码质量(Performance & Code Quality)——高开销绑定、信号与函数(signal-vs-function)方向选择、以单例(singleton)存储数据的反模式、MouseArea 与指针事件处理器(pointer handler)的取舍、delegate 中父对象的空值检查,以及可复用组件的尺寸设置。
第四步——整合与报告输出
技能会合并全部 linter 与智能体的输出,在文件与行级别对发现结果去重,并进行置信度评分。只有置信度超过 80/100 阈值的发现,才会作为确认问题上报;60–79 区间的发现则会单独归入"待排查项"章节,整份报告中最多列出十项;低于 60 的发现一律不予展示。每一项确认问题都包含文件与行号、规则类别、问题描述,以及以文字形式(而非代码补丁)给出的具体修复建议。

代码审查技能的局限性
这些技能并不能替代传统的静态与动态分析工具。架构验证——即检查组件边界、分层结构与依赖关系图是否合理——需要专门的工具与人工判断,这超出了逐文件 linting 与智能体审查所能提供的范畴。同样,针对已知漏洞模式的安全扫描、CVE 匹配的依赖检查以及供应链分析,也应交由专门的安全审查技能或外部扫描工具处理。这些工具是对 Qt 代码审查技能的补充,应与其配合使用,而非取而代之。
分析范围受限于智能体在审查会话中所能读取的内容。跨代码库的依赖、生成代码,以及不在源码树中的第三方头文件,均不会被分析。仅在链接期或运行时才会显现的问题——例如由特定输入序列触发的未定义行为、需要特定线程交错顺序才会出现的竞态条件(race condition),或是在运行时动态连接的 Qt 信号,都超出了静态审查的范围。
置信度阈值会屏蔽不确定的发现,这意味着部分真实存在的问题不会出现在报告中。对于从事安全关键或安全敏感代码工作的审查人员,应将该报告视为审查的最低起点,而非上限,并应结合人工审查使用。
依赖项
Qt C++ 代码审查技能需要 Python 3 来运行其内置的 linter,除标准库外无需额外安装其他软件包。若要进行基于 diff-scope 的审查,Git 必须已配置在 PATH 中。该技能面向 Qt6 C++ 代码库;Qt5 项目大体上也可正常使用,但部分检查项是 Qt6 专属的。
QML 代码审查技能同样需要 Python 3 来运行其 linter。来自 Qt6 安装环境的 qmllint 可选择性启用类型级检查;该技能会自动在 $QT_HOST_PATH/bin/ 或系统 PATH 中检测 qmllint,若未找到则会自动跳过该项检查,不影响其余流程。
已测试环境
这些技能已在 Claude Code CLI、Claude Desktop 以及 VS Code 中的 GitHub Copilot 环境下完成测试。Claude Sonnet 4.6、GPT 5.4 与 Gemini 3.1 Pro 均能取得良好效果。除上述已测试的模型外,针对深度任务,始终建议使用前沿模型(frontier model)。
获取这些技能
可通过我们的 GitHub 代码库获取 Qt 智能体技能:https://github.com/TheQtCompanyRnD/agent-skills
此外,也可直接从 Claude 应用市场(marketplace)以插件形式安装官方 Qt 代码审查技能(搜索 "qt-development" 即可找到)。