reference_qml_poc_structure.md
3.24 KB
name: QML PoC 文件结构与设计系统
description: feat/ui-qml-poc 分支的 QML 代码组织、Theme 令牌、组件 API
type: reference
originSessionId: 21abab40-0d6c-449a-ae72-9ca03205f077
目录结构:
qml_poc/
├── main_qml.py 入口:装配 5 桥 + audit_logger + history.refresh()
│ env 调试:QML_AUTO_LOGIN=1 / QML_DEBUG_TAB=0|1|2
└── qml/
├── qmldir 模块声明(singleton Theme 1.0)
├── Theme.qml Singleton 设计令牌
├── Main.qml ApplicationWindow(登录态切换尺寸 + 子页)
├── LoginScreen.qml 登录页(接 auth.login,错误展示 + busy)
├── MainWindow.qml 主窗口(下划线 TabBar + 任务队列 sidebar 接 taskQueue.model)
├── ImageGenTab.qml 图片生成 tab(参考图录入/收藏/下载/预览全接 imageGen)
├── HistoryTab.qml 历史记录 tab(ListView + 详情面板,接 history.model)
├── StyleDesignerTab.qml 款式设计 tab(8 字段 + 实时 Prompt 预览 + 生成)
└── components/
├── Card.qml 圆角 + 极淡边框,default property 子元素
├── PrimaryButton.qml pill 圆角 + Apple Blue + 120ms ColorAnimation
├── SecondaryButton.qml 圆角描边,hover 出灰底
├── ThemedTextField.qml 焦点 2px 蓝边动效
├── ThemedComboBox.qml 自定义 chevron + popup 圆角
└── CaptionLabel.qml 12pt DemiBold,组上方标签
Theme.qml 暴露的 token(singleton,QML import 后 Theme.accent 直接用):
- 颜色:bgCanvas/bgSurface/bgElevated/bgSubtle/bgHover, textPrimary/Secondary/Tertiary/OnAccent, borderDefault/Strong, divider, accent/Hover/Pressed/Subtle, success/warning/danger
- 尺寸:radiusSm/Md/Lg/Pill, space1-6, controlHSm/Md/Lg, fontXs/Sm/Base/Lg/Xl/Xxl
- 字体:fontFamily(按 Qt.platform.os 自动选 SF Pro / Segoe UI Variable)
关键设计规则:
- 所有圆角用
Theme.radiusXxx,不要硬编码 - 所有颜色用
Theme.xxx,不要硬编码 hex - caption + control 用 ColumnLayout spacing 4-6,组之间 spacing 12-16
- Card 内 anchors.margins 用
Theme.space4 (16)保证一致 - 主按钮(生成 / 登录 / 提交)一律 PrimaryButton(pill 圆角)
- 次按钮(添加 / 下载 / 取消)一律 SecondaryButton(描边圆角)
- 状态色(成功 / 失败 / 等待)用
color: Theme.success/danger/warning
AppState QObject(main_qml.py,作为 contextProperty 暴露):
- Property:
loggedIn(bool),currentTab(int) - Slot:
login(username, password) → bool,logout(),setTab(idx) - Signal:
loggedInChanged,currentTabChanged - 当前是 PoC 占位(login 接受任意非空),下一步要换成真实 db 认证
业务桥层 TODO(task #12):除 AppState,还需要暴露:
-
imageGen:参考图列表 / 提示词 / 生成方法 / 进度信号 -
styleDesigner:字段列表 / 词库管理 / Prompt 预览 -
history:QAbstractListModel(复用现有 HistoryListModel) -
taskQueue:QAbstractListModel for 任务列表 + 取消方法 -
theme:跟随系统 colorScheme,触发 QML Theme 切换