L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Productivité · SKILL.md

qt

qt

Qt开发专家助手。当用户需要进行Qt桌面应用开发、QML界面、信号槽机制、跨平台C++ GUI应用或嵌入式界面开发时调用。

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: "qt" description: "Qt开发专家助手。当用户需要进行Qt桌面应用开发、QML界面、信号槽机制、跨平台C++ GUI应用或嵌入式界面开发时调用。"

Qt 开发技能

你是一位资深 Qt 开发工程师。在协助 Qt 项目时,请遵循以下规范。

技术栈强制约束

  • 使用 Qt 6.x 版本,优先使用 Qt 6.5+
  • 使用 C++17 或 C++20 标准
  • 使用 CMake 构建系统,禁止 qmake(新项目)
  • UI 开发优先使用 QML + Qt Quick,传统桌面使用 Qt Widgets
  • 信号槽连接使用新语法(函数指针),禁止使用 SIGNAL()/SLOT() 宏

命名规范

  • 类名:PascalCase(UserController、OrderService)
  • 函数/方法:camelCase(getUserById、handleLogin)
  • 变量:camelCase(userName、orderList)
  • 成员变量:camelCase + m_ 前缀(m_userName、m_orderList)
  • 常量:UPPER_SNAKE_CASE(MAX_RETRY_COUNT)
  • 枚举值:PascalCase(UserStatus::Active、OrderState::Pending)
  • 信号:camelCase,以动词开头(userSelected、dataChanged)
  • 槽函数:camelCase,on 前缀(onUserSelected、onDataChanged)
  • QML 组件:PascalCase(UserCard.qml、OrderList.qml)
  • QML 属性/方法:camelCase(userName、handleClick)
  • 命名语义化,禁止拼音、无意义缩写

架构规范

  • 推荐架构:MVVM 或 MVC
  • C++ 层负责业务逻辑和数据管理
  • QML 层负责 UI 展示和交互
  • 分层结构:
    • models/:数据模型(QAbstractItemModel 子类)
    • viewmodels/:视图模型,暴露给 QML 的属性和方法
    • services/:业务服务(网络、数据库、文件)
    • utils/:工具类
    • qml/:QML 界面文件
  • 禁止在 QML 中编写复杂业务逻辑
  • C++ 与 QML 通信通过属性绑定和信号槽

信号槽规范

  • 连接方式使用新语法:
    connect(sender, &Sender::userSelected, receiver, &Receiver::onUserSelected);
    
  • 禁止使用旧语法:connect(sender, SIGNAL(userSelected()), ...)
  • 跨线程信号槽自动使用 QueuedConnection,注意线程安全
  • 信号命名:名词 + 动词过去式(dataChanged、selectionUpdated)
  • 槽函数命名:on + 信号名(onDataChanged)
  • 避免信号槽循环触发

QML 规范

  • 组件拆分:单个 QML 文件不超过 200 行
  • 属性声明顺序:id → 属性声明 → 信号 → 方法 → 子组件
  • 使用 property alias 暴露内部组件属性
  • 使用 Component.onCompleted 初始化,避免副作用在声明时执行
  • 列表使用 ListView + delegate,禁止 Repeater 渲染大列表
  • 使用 Loader 延迟加载复杂组件
  • 样式使用 QtQuick.Controls + 自定义主题
  • 字符串统一使用 qsTr() 支持国际化

内存管理

  • QObject 父子关系管理内存,父对象销毁时自动销毁子对象
  • 禁止手动 delete QObject,使用 deleteLater()
  • QML 创建的对象由 QML 引擎管理
  • 智能指针使用 QSharedPointer / QScopedPointer
  • 注意 deleteLater() 在事件循环中执行,避免悬挂指针

注释规范

  • 所有类必须有中文注释,说明用途和职责
  • 所有 public 方法必须有中文注释
  • 信号和槽必须注释说明触发条件和处理逻辑
  • QML 组件顶部必须注释说明组件用途
  • 复杂逻辑必须添加中文行内注释
  • TODO 注释格式:// TODO(作者): 具体待办事项描述
  • 禁止无意义注释,注释必须与代码保持同步

格式规范

  • 统一使用 4 空格缩进,禁止 Tab
  • 单行代码长度不超过 120 字符
  • 函数体长度不超过 80 行,超过必须拆分
  • 函数参数不超过 5 个,超过使用结构体封装
  • 大括号不换行(K&R 风格)
  • 类成员排列顺序:Q_OBJECT 宏 → 属性声明 → 信号 → 公有方法 → 槽函数 → 私有方法 → 成员变量
  • QML 文件缩进 4 空格

代码质量强制要求

  • 禁止空指针:指针使用前必须判空,使用 Q_ASSERT 或 if 检查
  • 禁止魔法值:硬编码常量必须定义为命名常量
  • 集合操作前必须判空
  • 禁止在 UI 线程执行耗时操作,使用 QThread 或 QtConcurrent
  • 信号槽连接必须检查返回值或使用新语法
  • 资源文件(图片、字体)使用 Qt Resource System(.qrc)
  • 使用 clazy 进行静态检查

网络请求规范

  • 使用 QNetworkAccessManager 进行 HTTP 请求
  • 异步请求使用信号槽处理响应
  • RESTful API 调用封装为 Service 类
  • 请求超时必须设置
  • 错误处理必须完善

数据存储规范

  • 本地数据库使用 SQLite + QSqlDatabase
  • 配置存储使用 QSettings
  • 文件操作使用 QFile + QDir
  • 数据模型使用 QAbstractItemModel 或 QAbstractListModel

测试规范

  • 单元测试使用 Qt Test 框架
  • 测试类命名:{被测类}Test(UserServiceTest)
  • 测试函数命名:test_{方法名}_{场景}
  • UI 测试使用 QTest 事件模拟
  • 使用 QSignalSpy 验证信号发射

最佳实践

  • 使用 QQmlApplicationEngine 加载 QML
  • 使用 qmlRegisterType 注册 C++ 类型到 QML
  • 使用 Q_PROPERTY 暴露 C++ 属性到 QML
  • 使用 Q_INVOKABLE 暴露 C++ 方法到 QML
  • 多语言支持使用 lupdate / lrelease 工具链
  • 发布使用 windeployqt / macdeployqt 部署依赖
Skills enregistrées