[{"data":1,"prerenderedAt":1310},["ShallowReactive",2],{"navigation_docs":3,"-design-technical-design":56,"-design-technical-design-surround":1305},[4,36,46],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":35},"快速开始","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"简介","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":16,"path":17,"stem":18,"icon":19},"安装与构建","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"如何使用","\u002Fgetting-started\u002Fusage","1.getting-started\u002F3.usage","i-lucide-play",{"title":26,"path":27,"stem":28,"icon":29},"项目结构","\u002Fgetting-started\u002Fproject-structure","1.getting-started\u002F4.project-structure","i-lucide-folder-tree",{"title":31,"path":32,"stem":33,"icon":34},"里程碑","\u002Fgetting-started\u002Fmilestones","1.getting-started\u002F5.milestones","i-lucide-map",false,{"title":37,"icon":38,"path":39,"stem":40,"children":41,"page":35},"设计","i-lucide-drafting-compass","\u002Fdesign","2.design",[42],{"title":43,"path":44,"stem":45,"icon":38},"技术方案","\u002Fdesign\u002Ftechnical-design","2.design\u002F1.technical-design",{"title":47,"icon":48,"path":49,"stem":50,"children":51,"page":35},"开发","i-lucide-puzzle","\u002Fdevelopment","3.development",[52],{"title":53,"path":54,"stem":55,"icon":48},"组件开发流程","\u002Fdevelopment\u002Fcomponent-workflow","3.development\u002F1.component-workflow",{"id":57,"title":43,"body":58,"description":1298,"extension":1299,"links":1300,"meta":1301,"navigation":1302,"path":44,"seo":1303,"stem":45,"__hash__":1304},"docs\u002F2.design\u002F1.technical-design.md",{"type":59,"value":60,"toc":1275},"minimark",[61,66,73,78,84,91,98,108,112,201,206,211,215,225,232,236,242,257,261,266,419,423,462,510,534,543,547,554,558,566,586,589,633,648,652,693,697,703,777,799,803,840,844,927,931,1050,1053,1057,1121,1125,1200,1203,1207,1214,1268,1271],[62,63,65],"h1",{"id":64},"qtshadcn-技术方案technical-design","QtShadcn 技术方案（Technical Design）",[67,68,69],"blockquote",{},[70,71,72],"p",{},"状态：Draft v0.1 — 待确认\n日期：2026-08-17",[74,75,77],"h2",{"id":76},"_1-项目定位","1. 项目定位",[70,79,80],{},[81,82,83],"strong",{},"QtShadcn — A modern, composable UI component library for Qt 6 \u002F QML, inspired by shadcn\u002Fui.",[70,85,86,87,90],{},"对标 shadcn\u002Fui 的设计哲学：",[81,88,89],{},"Design Token → Component → Composition → Theme → Animation","。组件可组合、可复制、无黑盒依赖；开发者在组件上组合出页面，而不是在画布上摆放控件。",[70,92,93,94,97],{},"明确",[81,95,96],{},"不做","：",[99,100,101,105],"ul",{},[102,103,104],"li",{},"❌ QWidget + QPainter 手绘控件（传统桌面控件库路线）",[102,106,107],{},"❌ 重新发明 Qt Quick Controls 的基础行为（键盘导航 \u002F Focus \u002F Accessibility \u002F 输入事件 \u002F Tab 顺序）",[74,109,111],{"id":110},"_2-技术选型","2. 技术选型",[113,114,115,131],"table",{},[116,117,118],"thead",{},[119,120,121,125,128],"tr",{},[122,123,124],"th",{},"层",[122,126,127],{},"选型",[122,129,130],{},"理由",[132,133,134,146,157,168,186],"tbody",{},[119,135,136,140,143],{},[137,138,139],"td",{},"UI \u002F Style",[137,141,142],{},"QML",[137,144,145],{},"声明式组合与 shadcn 心智天然契合；Design Token → 组件绑定直接",[119,147,148,151,154],{},[137,149,150],{},"基础行为",[137,152,153],{},"Qt Quick Controls 2",[137,155,156],{},"免费获得键盘导航、Focus、无障碍、Tab 顺序，不重复造轮子",[119,158,159,162,165],{},[137,160,161],{},"能力层",[137,163,164],{},"C++ (Qt 6)",[137,166,167],{},"Theme 引擎、Icon 注册、Model、窗口管理、原生集成",[119,169,170,173,180],{},[137,171,172],{},"构建",[137,174,175,176],{},"CMake + ",[177,178,179],"code",{},"qt_add_qml_module",[137,181,182,183],{},"官方推荐，QML 模块可被 ",[177,184,185],{},"import QtShadcn",[119,187,188,191,198],{},[137,189,190],{},"环境",[137,192,193,194,197],{},"Qt 6.11.1 @ ",[177,195,196],{},"~\u002FQt\u002F6.11.1\u002Fmacos"," (arm64)",[137,199,200],{},"本机已装",[70,202,203],{},[81,204,205],{},"核心原则：QML 负责 UI，C++ 负责能力。",[67,207,208],{},[70,209,210],{},"反模式警告：全部纯 QML 会让项目退化成\"一个 QML 样式库\"。Theme 系统、Icon 系统、Model\u002FTable Model、数据绑定、Native API、Window 管理、跨平台能力必须落在 C++。",[74,212,214],{"id":213},"_3-总体架构","3. 总体架构",[216,217,222],"pre",{"className":218,"code":220,"language":221},[219],"language-text","                QtShadcn\n                    │\n          ┌─────────┴─────────┐\n          ↓                   ↓\n        QML                  C++\n    UI \u002F Style             Core \u002F Logic\n  (组件、组合、样式)       (Theme 引擎、Icon、\n                           Model、原生能力)\n          │                   │\n          └─────────┬─────────┘\n                    ↓\n                  Qt 6\n","text",[177,223,220],{"__ignoreMap":224},"",[70,226,227,228,231],{},"依赖方向：",[81,229,230],{},"QML 组件 → C++ 能力层","（单向）。QML 组件只消费 C++ 暴露的 QObject 属性\u002F方法，C++ 不反向依赖具体 QML 组件。",[74,233,235],{"id":234},"_4-目录结构","4. 目录结构",[216,237,240],{"className":238,"code":239,"language":221},[219],"qtshadcn\u002F\n├── CMakeLists.txt              # 根构建\n├── src\u002F\n│   ├── qml\u002F                    # QML 组件（qt_add_qml_module, URI: QtShadcn）\n│   │   ├── Theme\u002F\n│   │   │   ├── Theme.qml       # 声明式主题入口（绑定 C++ ThemeManager）\n│   │   │   └── tokens\u002F         # light\u002Fdark 两套 token 定义\n│   │   ├── Components\u002F\n│   │   │   ├── ShadcnButton.qml\n│   │   │   ├── ShadcnInput.qml\n│   │   │   ├── ShadcnCard.qml     # Card = CardHeader\u002FCardContent\u002FCardFooter 组合\n│   │   │   ├── ShadcnDialog.qml\n│   │   │   ├── ShadcnTabs.qml\n│   │   │   ├── ShadcnBadge.qml\n│   │   │   └── ShadcnSwitch.qml\n│   │   ├── Icons\u002F\n│   │   │   └── Icon.qml        # 按 name 从 C++ IconRegistry 取 svg\n│   │   ├── Animations\u002F\n│   │   │   └── ...             # 预置过渡\u002F动画封装\n│   │   └── Utils\u002F\n│   ├── core\u002F                   # C++ 能力层\n│   │   ├── thememanager.{h,cpp}   # Theme 引擎（tokens 字典 + mode 切换）\n│   │   ├── iconregistry.{h,cpp}   # SVG 图标注册\u002F加载\n│   │   ├── models\u002F                # QAbstractListModel 等\n│   │   └── windowmanager.{h,cpp}  # 窗口管理（可选，后期）\n│   └── main.cpp                # 注册 context property \u002F singleton\n├── examples\u002F\n│   └── showcase\u002F               # 组件展示应用（每个里程碑的验证载体）\n└── docs\u002F                       # Docus 文档站\n",[177,241,239],{"__ignoreMap":224},[70,243,244,97,247,249,250,253,254,256],{},[81,245,246],{},"QML 模块约定",[177,248,179],{}," 生成 URI ",[177,251,252],{},"QtShadcn","，用法 ",[177,255,185],{},"。",[74,258,260],{"id":259},"_5-design-token-系统m1-核心第一个里程碑","5. Design Token 系统（M1 核心，第一个里程碑）",[262,263,265],"h3",{"id":264},"_51-token-语义对齐-shadcnui","5.1 Token 语义（对齐 shadcn\u002Fui）",[113,267,268,281],{},[116,269,270],{},[119,271,272,275,278],{},[122,273,274],{},"类别",[122,276,277],{},"Token",[122,279,280],{},"说明",[132,282,283,296,308,320,332,344,356,368,380,393,406],{},[119,284,285,288,293],{},[137,286,287],{},"颜色",[137,289,290],{},[177,291,292],{},"background \u002F foreground",[137,294,295],{},"页面底色 \u002F 正文色",[119,297,298,300,305],{},[137,299,287],{},[137,301,302],{},[177,303,304],{},"primary \u002F primaryForeground",[137,306,307],{},"主操作色",[119,309,310,312,317],{},[137,311,287],{},[137,313,314],{},[177,315,316],{},"secondary \u002F secondaryForeground",[137,318,319],{},"次操作",[119,321,322,324,329],{},[137,323,287],{},[137,325,326],{},[177,327,328],{},"muted \u002F mutedForeground",[137,330,331],{},"弱化区（输入框底、hover）",[119,333,334,336,341],{},[137,335,287],{},[137,337,338],{},[177,339,340],{},"accent \u002F accentForeground",[137,342,343],{},"高亮（选中、菜单 hover）",[119,345,346,348,353],{},[137,347,287],{},[137,349,350],{},[177,351,352],{},"destructive \u002F destructiveForeground",[137,354,355],{},"危险操作",[119,357,358,360,365],{},[137,359,287],{},[137,361,362],{},[177,363,364],{},"border",[137,366,367],{},"边框",[119,369,370,372,377],{},[137,371,287],{},[137,373,374],{},[177,375,376],{},"ring",[137,378,379],{},"焦点环",[119,381,382,385,390],{},[137,383,384],{},"形状",[137,386,387],{},[177,388,389],{},"radius",[137,391,392],{},"全局圆角（如 8）",[119,394,395,398,403],{},[137,396,397],{},"间距",[137,399,400],{},[177,401,402],{},"spacing.*",[137,404,405],{},"刻度：xs\u002Fsm\u002Fmd\u002Flg\u002Fxl",[119,407,408,411,416],{},[137,409,410],{},"字体",[137,412,413],{},[177,414,415],{},"typography.*",[137,417,418],{},"字号\u002F字重层级",[262,420,422],{"id":421},"_52-机制qml-声明-c-引擎","5.2 机制（QML 声明 + C++ 引擎）",[216,424,428],{"className":425,"code":426,"language":427,"meta":224,"style":224},"language-qml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F 声明式用法（QML 侧）\nQtShadcnTheme {\n    id: theme\n    mode: \"dark\"          \u002F\u002F \"light\" | \"dark\" | 未来可扩展\n}\n","qml",[177,429,430,438,444,450,456],{"__ignoreMap":224},[431,432,435],"span",{"class":433,"line":434},"line",1,[431,436,437],{},"\u002F\u002F 声明式用法（QML 侧）\n",[431,439,441],{"class":433,"line":440},2,[431,442,443],{},"QtShadcnTheme {\n",[431,445,447],{"class":433,"line":446},3,[431,448,449],{},"    id: theme\n",[431,451,453],{"class":433,"line":452},4,[431,454,455],{},"    mode: \"dark\"          \u002F\u002F \"light\" | \"dark\" | 未来可扩展\n",[431,457,459],{"class":433,"line":458},5,[431,460,461],{},"}\n",[99,463,464,488,507],{},[102,465,466,472,473,476,477,480,481,484,485,256],{},[81,467,468,469],{},"C++ ",[177,470,471],{},"ThemeManager","（QObject，单例注册进 QML）：持有 ",[177,474,475],{},"light"," \u002F ",[177,478,479],{},"dark"," 两套 token 字典（QVariantMap），",[177,482,483],{},"mode"," 属性切换时整体替换并 emit ",[177,486,487],{},"tokensChanged",[102,489,490,496,497,500,501,500,503,506],{},[81,491,492,493],{},"QML ",[177,494,495],{},"QtShadcnTheme","：薄封装，把 C++ tokens 映射成语义化属性（",[177,498,499],{},"primary","、",[177,502,389],{},[177,504,505],{},"spacingSm","…），组件直接绑定。",[102,508,509],{},"组件内用法：",[216,511,513],{"className":425,"code":512,"language":427,"meta":224,"style":224},"Rectangle {\n    color: theme.primary\n    radius: theme.radius\n}\n",[177,514,515,520,525,530],{"__ignoreMap":224},[431,516,517],{"class":433,"line":434},[431,518,519],{},"Rectangle {\n",[431,521,522],{"class":433,"line":440},[431,523,524],{},"    color: theme.primary\n",[431,526,527],{"class":433,"line":446},[431,528,529],{},"    radius: theme.radius\n",[431,531,532],{"class":433,"line":452},[431,533,461],{},[99,535,536],{},[102,537,538,539,542],{},"切换：",[177,540,541],{},"theme.mode = \"dark\""," → 全局随动（所有绑定自动刷新）。",[262,544,546],{"id":545},"_53-为什么先做-theme","5.3 为什么先做 Theme",[70,548,549,550,553],{},"Button 只是验证设计系统合理性的",[81,551,552],{},"第一个组件","。Token 层没定，组件层就是空中楼阁；Token 层定了，后续每个组件都是\"查 token → 套样式\"的机械工作。",[74,555,557],{"id":556},"_6-组件设计规范","6. 组件设计规范",[262,559,561,562,565],{"id":560},"_61-命名-已决shadcn-前缀","6.1 命名（✅ 已决：",[177,563,564],{},"Shadcn*"," 前缀）",[70,567,568,571,572,575,576,476,579,476,582,585],{},[81,569,570],{},"决策","：所有组件带 ",[177,573,574],{},"Shadcn"," 前缀（",[177,577,578],{},"ShadcnButton",[177,580,581],{},"ShadcnCard",[177,583,584],{},"ShadcnInput"," …）。",[70,587,588],{},"理由：",[590,591,592,607,621,628],"ol",{},[102,593,594,595,598,599,602,603,606],{},"组件内部必须 ",[177,596,597],{},"import QtQuick.Controls"," 拿基类——无前缀 ",[177,600,601],{},"Button"," 会与 ",[177,604,605],{},"QQC.Button"," 同名冲突（QML 同名类型后导入者覆盖 + 编译警告），必踩坑；",[102,608,609,610,612,613,616,617,620],{},"使用方混用场景（",[177,611,578],{}," + ",[177,614,615],{},"QQC.ComboBox","）零歧义；无前缀则须 ",[177,618,619],{},"import QtQuick.Controls as QQC"," 转嫁负担；",[102,622,623,624,627],{},"行业先例：FluentUI（",[177,625,626],{},"FButton","）等 QML 组件库均走前缀路线；",[102,629,630,631,256],{},"组件内部基类统一别名引用：",[177,632,619],{},[70,634,635,636,639,640,643,644,647],{},"变体枚举实现：Qt 6 QML ",[177,637,638],{},"enum"," → ",[177,641,642],{},"ShadcnButton.Variant.Primary","；短写法 ",[177,645,646],{},"ShadcnButton.Primary"," 用 readonly property 补一层（M2 实施时定）。",[262,649,651],{"id":650},"_62-api-风格对齐-shadcnui-变体","6.2 API 风格（对齐 shadcn\u002Fui 变体）",[216,653,655],{"className":425,"code":654,"language":427,"meta":224,"style":224},"ShadcnButton {\n    text: \"Deploy\"\n    variant: ShadcnButton.Primary   \u002F\u002F Primary \u002F Secondary \u002F Outline \u002F Ghost \u002F Destructive\n    size: ShadcnButton.Medium       \u002F\u002F Small \u002F Medium \u002F Large \u002F Icon\n    disabled: false\n    onClicked: { ... }\n}\n",[177,656,657,662,667,672,677,682,688],{"__ignoreMap":224},[431,658,659],{"class":433,"line":434},[431,660,661],{},"ShadcnButton {\n",[431,663,664],{"class":433,"line":440},[431,665,666],{},"    text: \"Deploy\"\n",[431,668,669],{"class":433,"line":446},[431,670,671],{},"    variant: ShadcnButton.Primary   \u002F\u002F Primary \u002F Secondary \u002F Outline \u002F Ghost \u002F Destructive\n",[431,673,674],{"class":433,"line":452},[431,675,676],{},"    size: ShadcnButton.Medium       \u002F\u002F Small \u002F Medium \u002F Large \u002F Icon\n",[431,678,679],{"class":433,"line":458},[431,680,681],{},"    disabled: false\n",[431,683,685],{"class":433,"line":684},6,[431,686,687],{},"    onClicked: { ... }\n",[431,689,691],{"class":433,"line":690},7,[431,692,461],{},[262,694,696],{"id":695},"_63-实现路径复用-quick-controls","6.3 实现路径（复用 Quick Controls）",[216,698,701],{"className":699,"code":700,"language":221,"meta":224},[219],"Qt Quick Controls (Control 基类)\n        ↓ 继承\u002F内嵌，保留\n键盘导航 · Focus · Accessibility · Tab 顺序 · 输入事件\n        ↓ 只替换\ncontentItem（视觉结构）· background（样式）· 新增 variant\u002Fsize API\n",[177,702,700],{"__ignoreMap":224},[99,704,705,726,737,754,767],{},[102,706,707,709,710,712,713,476,716,719,720,476,723,256],{},[81,708,578],{},"：基于 ",[177,711,605],{},"，重写 ",[177,714,715],{},"background",[177,717,718],{},"contentItem","，新增 ",[177,721,722],{},"variant",[177,724,725],{},"size",[102,727,728,709,730,733,734,736],{},[81,729,584],{},[177,731,732],{},"QQC.TextField","，替换背景 + 聚焦环（",[177,735,376],{}," token）。",[102,738,739,709,742,745,746,749,750,753],{},[81,740,741],{},"ShadcnDialog",[177,743,744],{},"QQC.Dialog","（或 ",[177,747,748],{},"Popup","），套 Card 视觉 + 遮罩（",[177,751,752],{},"overlay"," 机制定制）。",[102,755,756,709,759,762,763,766],{},[81,757,758],{},"ShadcnTabs",[177,760,761],{},"QQC.TabBar","\u002F",[177,764,765],{},"TabButton"," 样式化。",[102,768,769,772,773,776],{},[81,770,771],{},"Card","：纯组合组件，",[177,774,775],{},"CardHeader \u002F CardContent \u002F CardFooter"," 子组件，对齐 shadcn:",[216,778,782],{"className":779,"code":780,"language":781,"meta":224,"style":224},"language-tsx shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F shadcn\u002Fui 参照\n\u003CCard>\u003CCardHeader>\u003CCardTitle>…\u003C\u002FCardTitle>\u003C\u002FCardHeader>\n     \u003CCardContent>\u003CInput\u002F>\u003CButton>Create\u003C\u002FButton>\u003C\u002FCardContent>\u003C\u002FCard>\n","tsx",[177,783,784,789,794],{"__ignoreMap":224},[431,785,786],{"class":433,"line":434},[431,787,788],{},"\u002F\u002F shadcn\u002Fui 参照\n",[431,790,791],{"class":433,"line":440},[431,792,793],{},"\u003CCard>\u003CCardHeader>\u003CCardTitle>…\u003C\u002FCardTitle>\u003C\u002FCardHeader>\n",[431,795,796],{"class":433,"line":446},[431,797,798],{},"     \u003CCardContent>\u003CInput\u002F>\u003CButton>Create\u003C\u002FButton>\u003C\u002FCardContent>\u003C\u002FCard>\n",[262,800,802],{"id":801},"_64-组件优先级","6.4 组件优先级",[113,804,805,814],{},[116,806,807],{},[119,808,809,811],{},[122,810,31],{},[122,812,813],{},"组件",[132,815,816,824,832],{},[119,817,818,821],{},[137,819,820],{},"M2",[137,822,823],{},"ShadcnButton（第一个，验证设计系统）",[119,825,826,829],{},[137,827,828],{},"M3",[137,830,831],{},"Input \u002F Card \u002F Badge \u002F Switch \u002F Tabs \u002F Dialog",[119,833,834,837],{},[137,835,836],{},"M4+",[137,838,839],{},"Select \u002F Checkbox \u002F Tooltip \u002F Table \u002F Toast 等",[74,841,843],{"id":842},"_7-c-能力层","7. C++ 能力层",[113,845,846,858],{},[116,847,848],{},[119,849,850,853,856],{},[122,851,852],{},"模块",[122,854,855],{},"职责",[122,857,31],{},[132,859,860,872,889,902,914],{},[119,861,862,866,869],{},[137,863,864],{},[177,865,471],{},[137,867,868],{},"token 字典、mode 切换、主题持久化",[137,870,871],{},"M1",[119,873,874,879,886],{},[137,875,876],{},[177,877,878],{},"IconRegistry",[137,880,881,882,885],{},"svg 图标注册 + currentColor 替换渲染（QSvgRenderer → QImage），经 QQuickImageProvider 暴露 ",[177,883,884],{},"image:\u002F\u002Ficons\u002Fname?color=...","，支持动态变色",[137,887,888],{},"M4",[119,890,891,896,899],{},[137,892,893],{},[177,894,895],{},"Models",[137,897,898],{},"QAbstractListModel 基类，供 Table\u002FSelect 数据源",[137,900,901],{},"M5",[119,903,904,909,912],{},[137,905,906],{},[177,907,908],{},"WindowManager",[137,910,911],{},"多窗口\u002F原生窗口能力（可选）",[137,913,901],{},[119,915,916,921,924],{},[137,917,918],{},[177,919,920],{},"Native Integration",[137,922,923],{},"平台能力桥（按需）",[137,925,926],{},"后期",[74,928,930],{"id":929},"_8-里程碑计划","8. 里程碑计划",[113,932,933,946],{},[116,934,935],{},[119,936,937,940,943],{},[122,938,939],{},"阶段",[122,941,942],{},"内容",[122,944,945],{},"交付物 \u002F 验证",[132,947,948,972,990,1002,1013,1025,1037],{},[119,949,950,955,966],{},[137,951,952],{},[81,953,954],{},"M0",[137,956,957,958,961,962,965],{},"仓库骨架：根 CMakeLists + ",[177,959,960],{},"src\u002Fqml"," 模块 + ",[177,963,964],{},"src\u002Fcore"," + showcase 空应用",[137,967,968,971],{},[177,969,970],{},"cmake --build"," 通过，空窗口能起",[119,973,974,978,984],{},[137,975,976],{},[81,977,871],{},[137,979,980,981,983],{},"Theme 基础层：C++ ThemeManager + light\u002Fdark tokens + ",[177,982,495],{}," + showcase 色板页",[137,985,986,987,989],{},"运行 showcase，",[177,988,483],{}," 切换全局变色",[119,991,992,996,999],{},[137,993,994],{},[81,995,820],{},[137,997,998],{},"Button 组件（variant\u002Fsize\u002Fdisabled\u002Floading）",[137,1000,1001],{},"showcase 展示全部变体；键盘导航、Tab 焦点可用",[119,1003,1004,1008,1010],{},[137,1005,1006],{},[81,1007,828],{},[137,1009,831],{},[137,1011,1012],{},"showcase 组合示例（如\"新建项目\"卡片）",[119,1014,1015,1019,1022],{},[137,1016,1017],{},[81,1018,888],{},[137,1020,1021],{},"Icon 系统 + Animations",[137,1023,1024],{},"图标随主题变色、预置过渡",[119,1026,1027,1031,1034],{},[137,1028,1029],{},[81,1030,901],{},[137,1032,1033],{},"C++ Models \u002F Table、WindowManager",[137,1035,1036],{},"Table 组件接 QAbstractListModel",[119,1038,1039,1044,1047],{},[137,1040,1041],{},[81,1042,1043],{},"M6",[137,1045,1046],{},"文档站完善 + README + 发布",[137,1048,1049],{},"docs 真实内容替换模板",[70,1051,1052],{},"每个里程碑独立可构建、可运行验证（showcase 承载）。",[74,1054,1056],{"id":1055},"_9-风险与决策记录","9. 风险与决策记录",[113,1058,1059,1069],{},[116,1060,1061],{},[119,1062,1063,1066],{},[122,1064,1065],{},"风险\u002F决策",[122,1067,1068],{},"结论",[132,1070,1071,1079,1090,1105,1113],{},[119,1072,1073,1076],{},[137,1074,1075],{},"纯 QML 陷阱（退化成样式库）",[137,1077,1078],{},"能力层必须 C++：Theme\u002FIcon\u002FModel\u002F原生",[119,1080,1081,1084],{},[137,1082,1083],{},"与 Quick Controls 命名冲突",[137,1085,1086,1087,1089],{},"✅ 已决：",[177,1088,564],{}," 前缀（理由见 6.1）",[119,1091,1092,1099],{},[137,1093,1094,1095,1098],{},"Quick Controls 2 样式系统（",[177,1096,1097],{},"qtquickcontrols2.conf","）",[137,1100,1101,1102],{},"✅ 已决：不用，token 自绘；基类行为照用，遮罩走 ",[177,1103,1104],{},"Popup.overlay",[119,1106,1107,1110],{},[137,1108,1109],{},"图标方案",[137,1111,1112],{},"✅ 已决：svg + lucide + IconRegistry；currentColor 替换实现动态变色，按需打包进 .qrc",[119,1114,1115,1118],{},[137,1116,1117],{},"主题扩展（跟随系统 \u002F 自定义 token 覆盖）",[137,1119,1120],{},"M1 先做 light\u002Fdark 两套 + 手切，跟随系统后期加",[74,1122,1124],{"id":1123},"_10-构建与验证","10. 构建与验证",[216,1126,1130],{"className":1127,"code":1128,"language":1129,"meta":224,"style":224},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# 本机环境\ncmake -S . -B build -DCMAKE_PREFIX_PATH=\"$HOME\u002FQt\u002F6.11.1\u002Fmacos\"\ncmake --build build\n\n# 运行 showcase\n.\u002Fbuild\u002Fexamples\u002Fshowcase\u002Fshowcase\n","bash",[177,1131,1132,1138,1174,1184,1190,1195],{"__ignoreMap":224},[431,1133,1134],{"class":433,"line":434},[431,1135,1137],{"class":1136},"sHwdD","# 本机环境\n",[431,1139,1140,1144,1148,1151,1154,1157,1160,1164,1168,1171],{"class":433,"line":440},[431,1141,1143],{"class":1142},"sBMFI","cmake",[431,1145,1147],{"class":1146},"sfazB"," -S",[431,1149,1150],{"class":1146}," .",[431,1152,1153],{"class":1146}," -B",[431,1155,1156],{"class":1146}," build",[431,1158,1159],{"class":1146}," -DCMAKE_PREFIX_PATH=",[431,1161,1163],{"class":1162},"sMK4o","\"",[431,1165,1167],{"class":1166},"sTEyZ","$HOME",[431,1169,1170],{"class":1146},"\u002FQt\u002F6.11.1\u002Fmacos",[431,1172,1173],{"class":1162},"\"\n",[431,1175,1176,1178,1181],{"class":433,"line":446},[431,1177,1143],{"class":1142},[431,1179,1180],{"class":1146}," --build",[431,1182,1183],{"class":1146}," build\n",[431,1185,1186],{"class":433,"line":452},[431,1187,1189],{"emptyLinePlaceholder":1188},true,"\n",[431,1191,1192],{"class":433,"line":458},[431,1193,1194],{"class":1136},"# 运行 showcase\n",[431,1196,1197],{"class":433,"line":684},[431,1198,1199],{"class":1142},".\u002Fbuild\u002Fexamples\u002Fshowcase\u002Fshowcase\n",[70,1201,1202],{},"验证标准：每个里程碑结束，showcase 可运行，新增组件全部变体可见、交互可用（键盘导航 + 鼠标）。",[74,1204,1206],{"id":1205},"_11-组件开发流程强制m2-教训","11. 组件开发流程（强制，M2 教训）",[70,1208,1209,1210,1213],{},"开发任何组件",[81,1211,1212],{},"前","必须先研究 shadcn\u002Fui 参考实现，禁止凭印象直接写：",[590,1215,1216,1225,1250,1256,1262],{},[102,1217,1218,97,1221,1224],{},[81,1219,1220],{},"抓取官方文档",[177,1222,1223],{},"curl -sL -x http:\u002F\u002F127.0.0.1:7897 \"https:\u002F\u002Fui.shadcn.com\u002Fdocs\u002Fcomponents\u002F\u003Cname>\"","（网速慢用代理 7897）",[102,1226,1227,1230,1231,1234,1235,1238,1239,612,1242,1245,1246,1249],{},[81,1228,1229],{},"抓取源码","：GitHub ",[177,1232,1233],{},"shadcn-ui\u002Fui"," 仓库（v2\u002Fv3 稳定路径 ",[177,1236,1237],{},"apps\u002Fwww\u002Fregistry\u002Fdefault\u002Fui\u002F\u003Cname>.tsx","；2026 仓库重构后 v4 在 ",[177,1240,1241],{},"apps\u002Fv4\u002Fregistry\u002F__components__\u002F*.tsx",[177,1243,1244],{},"styles\u002Fbase-*\u002Fui\u002F","），用 ",[177,1247,1248],{},"gh api"," 抓 raw（认证免限流）",[102,1251,1252,1255],{},[81,1253,1254],{},"梳理规范清单","：variants \u002F sizes（含像素值）\u002F 交互状态（hover·pressed·disabled·loading·focus）\u002F 样式细节（圆角、字重、opacity）\u002F API \u002F 无障碍与键盘交互",[102,1257,1258,1261],{},[81,1259,1260],{},"输出对照表","：shadcn 规范 vs 本组件实现差距，确认后再写代码",[102,1263,1264,1267],{},[81,1265,1266],{},"实现后","：showcase 全状态展示（全部 variant × size × 状态）",[70,1269,1270],{},"M2 实测偏差教训：尺寸整体小一档（Medium 应 40 非 36）、漏 link variant、圆角应 6px（rounded-md）非 8、字重 font-medium=500、disabled opacity 50% 非 70%、ghost\u002Foutline hover 用 accent 色而 link 仅下划线。",[1272,1273,1274],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":224,"searchDepth":440,"depth":440,"links":1276},[1277,1278,1279,1280,1281,1286,1293,1294,1295,1296,1297],{"id":76,"depth":440,"text":77},{"id":110,"depth":440,"text":111},{"id":213,"depth":440,"text":214},{"id":234,"depth":440,"text":235},{"id":259,"depth":440,"text":260,"children":1282},[1283,1284,1285],{"id":264,"depth":446,"text":265},{"id":421,"depth":446,"text":422},{"id":545,"depth":446,"text":546},{"id":556,"depth":440,"text":557,"children":1287},[1288,1290,1291,1292],{"id":560,"depth":446,"text":1289},"6.1 命名（✅ 已决：Shadcn* 前缀）",{"id":650,"depth":446,"text":651},{"id":695,"depth":446,"text":696},{"id":801,"depth":446,"text":802},{"id":842,"depth":440,"text":843},{"id":929,"depth":440,"text":930},{"id":1055,"depth":440,"text":1056},{"id":1123,"depth":440,"text":1124},{"id":1205,"depth":440,"text":1206},"QtShadcn 技术设计：定位、选型、架构、Token 系统、组件规范、里程碑与风险决策。","md",null,{},{"icon":38},{"title":43,"description":1298},"N3wIR6Rh61bTK3Xf8n3jC_JL1wpJsZlPGBSo535YGZQ",[1306,1308],{"title":31,"path":32,"stem":33,"description":1307,"icon":34,"children":-1},"组件开发路线图与当前进度。",{"title":53,"path":54,"stem":55,"description":1309,"icon":48,"children":-1},"开发 QtShadcn 组件的工作流：先研究 shadcn\u002Fui 官方规范再实现（M2 教训）。",1787050744383]