Files
Share_Li/share
2026-02-05 07:06:31 +00:00

313 lines
12 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Host 121.196.200.148
HostName 121.196.200.148
Port 2222
User git
IdentityFile C:\Users\Klein\.ssh\id_rsa_kylin_Klein
在将 `ku2d-hmi` 转化为 Qt 工程的过程中,第一步“环境搭建与 CMake 改造”决定了后续开发的底层逻辑。其核心目标是:**在保留原有业务逻辑编译能力的基础上,引入 Qt 的构建套件。**
以下是该阶段的大方向实施步骤:
---
### 1. 开发环境基准对齐
在进行代码改动前,必须确保编译器与 Qt 库的版本兼容。
* **编译器确认**:根据 Qt 版本选择合适的 C++ 标准Qt 6 建议使用 C++17 或更高)。
* **Qt 插件安装**:安装 Qt 本身及其对应的构建工具(如 Ninja 或 Make
* **IDE 准备**:配置 VS Code (配合 CMake 插件) 或 Qt Creator使其能够正确识别项目的 `CMakeLists.txt`。
---
### 2. 核心逻辑的“库化”分离
为了不破坏原有的业务逻辑,需在构建层面将“计算逻辑”与“界面展示”解耦。
* **创建 Core 静态库**:修改 `src/CMakeLists.txt`,将 `protocol`, `business`, `infra`, `transport` 等非 UI 目录打包成一个名为 `ku2d_core` 的静态库。
* **清理依赖关系**:确保 `ku2d_core` 仅依赖 Protobuf、YAML-CPP 等基础库,而不依赖任何 Qt 组件。
---
### 3. 根目录 CMake 配置“Qt 化”
在顶级 `CMakeLists.txt` 中注入 Qt 的生命周期管理逻辑。
* **声明 Qt 依赖**:使用 `find_package` 指令显式引入 `Qt6` 的 `Core`, `Widgets`, `Gui` 模块。
* **开启自动处理机制**
* `set(CMAKE_AUTOMOC ON)`:处理 Qt 信号槽宏。
* `set(CMAKE_AUTOUIC ON)`:处理 `.ui` 界面文件。
* `set(CMAKE_AUTORCC ON)`:处理图标等资源文件。
---
### 4. 创建 Qt 专用可执行程序目标
在 `src/app` 或新建的 UI 目录中,定义新的构建目标。
* **定义可执行文件**:创建一个新的编译目标(如 `ku2d-gui`),将其源文件指向新的 Qt `main.cpp` 和 UI 类。
* **执行目标链接**:将该目标与 `ku2d_core` 库以及 `Qt6::Widgets` 等库进行链接Target Link Libraries
---
### 5. 入口函数重定向
将程序的控制权从原有的 C++ 循环移交给 Qt 事件循环。
* **主入口切换**:废弃原有的 `src/main.cpp` 启动逻辑,编写符合 Qt 规范的 `QApplication` 启动代码。
* **后台线程初始化**:在 Qt 启动前,确保原有的后端 `Coordinator` 能在非主线程中正确初始化。
---
### 6. 环境冒烟测试
验证构建系统是否闭环。
* **编译验证**:尝试执行 CMake Configure 和 Build确保没有因库冲突导致的链接错误。
* **空窗运行**:启动程序,若能成功弹出一个空白的 `QMainWindow` 且后台日志正常滚动,则表示第一步环境搭建完成。
{
// ==================== [ 核心功能与安全 ] ====================
// 文件自动保存 - 延迟后自动保存
"files.autoSave": "afterDelay",
// 自动检测文件编码
"files.autoGuessEncoding": true,
// 保存时删除行尾空格
"files.trimTrailingWhitespace": true,
// 文件末尾插入最终换行符
"files.insertFinalNewline": true,
// 删除文件末尾多余换行符
"files.trimFinalNewlines": true,
// ==================== [ 代码格式化与缩进 (强制 4 空格) ] ====================
// 强制使用空格进行缩进
"editor.insertSpaces": true,
// 强制设置缩进宽度为 4 个空格
"editor.tabSize": 4,
// 禁用自动检测,以确保 4 个空格的全局设置覆盖所有文件 (从 true 修正为 false以确保强制执行)
"editor.detectIndentation": true,
// 启用保存时自动格式化
"editor.formatOnSave": true,
// ==================== [ 编辑器可视化与人体工学优化 ] ====================
// **字体系列:** 整合新设置,并保留中文字体后备
"editor.fontFamily": "JetBrains Mono",
// 字体大小 (统一为 18)
"editor.fontSize": 16,
// 行高 (来自新设置,提升可读性)
"editor.lineHeight": 26,
// 字间距 (来自新设置,缓解视觉疲劳)
"editor.letterSpacing": 0.7,
// 启用字体连字 (来自笔记本设置)
"editor.fontLigatures": true,
// 显示空格/制表符边界:设置为 all 以便查看 4 个点表示一个制表符
"editor.renderWhitespace": "all",
// 启用缩进引导线(即制表位上的竖线)
"editor.guides.indentation": true,
// 行状光标更容易定位 (来自新设置)
"editor.cursorStyle": "line",
// 平滑闪烁,减少视觉疲劳 (来自新设置)
"editor.cursorBlinking": "smooth",
// 平滑滚动 (来自新设置)
"editor.smoothScrolling": true,
// 高亮活动括号对 (来自新设置)
"editor.guides.bracketPairs": "active",
// 显示标尺线
"editor.rulers": [
100,
120
],
// 禁用自动换行
"editor.wordWrap": "off",
// 启用 Tab 补全
"editor.tabCompletion": "on",
// 启用内联建议
"editor.inlineSuggest.enabled": true,
// ==================== [ 工作台与界面 ] ====================
// 禁用预览模式 (来自笔记本设置)
"workbench.editor.enablePreview": true,
// 快速打开时禁用预览
"workbench.editor.enablePreviewFromQuickOpen": false,
// 始终显示缩略图滑块 (来自笔记本设置)
"editor.minimap.showSlider": "always",
// 只显示单个标签页
"workbench.editor.showTabs": "multiple",
// 隐藏空编辑器提示
"workbench.editor.empty.hint": "hidden",
// 颜色主题:默认采用新设置的 Monokai如果喜欢 Dracular 请自行修改
"workbench.colorTheme": "Monokai",
// 启动时不打开编辑器
"workbench.startupEditor": "none",
// 文件图标主题
"workbench.iconTheme": "vs-seti",
// 文件树缩进
"workbench.tree.indent": 24,
// 文件树渲染缩进引导线
"workbench.tree.renderIndentGuides": "always",
// ==================== [ 终端配置 ] ====================
// 终端字体系列 (来自新设置)
"terminal.integrated.fontFamily": "Consolas",
// 终端字体大小 (统一为 16)
"terminal.integrated.fontSize": 16,
// 终端行高 (来自新设置)
"terminal.integrated.lineHeight": 1.4,
// 终端平滑滚动 (来自笔记本设置)
"terminal.integrated.smoothScrolling": true,
// 终端光标样式
"terminal.integrated.cursorStyle": "line",
// 选择时自动复制 (来自笔记本设置)
"terminal.integrated.copyOnSelection": true,
// 右键粘贴 (来自笔记本设置)
"terminal.integrated.rightClickBehavior": "paste",
// 终端配置文件(保留 Windows 特定配置)
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"icon": "terminal-powershell"
},
"Command Prompt": {
"path": [
"${env:windir}\\Sysnative\\cmd.exe",
"${env:windir}\\System32\\cmd.exe"
],
"args": [],
"icon": "terminal-cmd"
},
"Git Bash": {
"source": "Git Bash"
},
// 保留 PowerShell 7 路径,但建议使用 'source'
"PowerShell 7 (pwsh)": {
"path": "D:\\Software\\PowerShell\\7\\pwsh.exe",
"args": []
}
},
// ==================== [ 扩展与 AI 助手 ] ====================
// Copilot 启用状态 (保留笔记本设置)
"github.copilot.enable": {
"*": true,
"plaintext": false,
"markdown": true,
"scminput": false,
"c": true,
"cpp": true
},
"github.copilot.chat.codesearch.enabled": true,
"github.copilot.nextEditSuggestions.enabled": true,
// DeepSeek 语言设置 (保留,但密钥和 URL 已移除)
"deepseek.lang": "cn",
// Emmet 启用 Tab 展开 (保留)
"emmet.triggerExpansionOnTab": true,
// ==================== [ 性能与杂项优化 ] ====================
// 文件资源管理器不确认删除/拖放
"explorer.confirmDelete": false,
"explorer.confirmDragAndDrop": false,
"explorer.confirmPasteNative": false,
// Git 自动拉取
"git.autofetch": true,
// ==================== [ 语言特定设置 ] ====================
"[json]": {
"editor.defaultFormatter": "vscode.json-language-features",
"editor.formatOnSave": true
},
"[jsonc]": {
"editor.defaultFormatter": "vscode.json-language-features",
"editor.formatOnSave": true
},
"[javascript]": {
"editor.defaultFormatter": "vscode.typescript-language-features",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
},
"[typescript]": {
"editor.defaultFormatter": "vscode.typescript-language-features",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
},
"[html]": {
"editor.defaultFormatter": "vscode.html-language-features",
"editor.formatOnSave": true
},
"[css]": {
"editor.defaultFormatter": "vscode.css-language-features",
"editor.formatOnSave": true
},
"[markdown]": {
"editor.defaultFormatter": "yzhang.markdown-all-in-one",
"editor.formatOnSave": false
},
"markdown-preview-enhanced.previewTheme": "github-light.css",
"geminicodeassist.project": "peta-tea-jrc5w",
"chat.tools.terminal.autoApprove": {
"git add": true,
"/^Get-Command ninja -ErrorAction SilentlyContinue \\| Format-List; Get-Command cl -ErrorAction SilentlyContinue \\| Format-List; Get-Command nvcc -ErrorAction SilentlyContinue \\| Format-List$/": {
"approve": true,
"matchCommandLine": true
},
"docker build": true
},
"[cpp]": {
"files.encoding": "utf8bom"
},
"[c]": {
"files.encoding": "utf8bom"
},
"[h]": {
"files.encoding": "utf8bom"
},
"terminal.integrated.shellArgs.windows": [
"/k",
"chcp 65001"
],
"powershell.promptToUpdatePowerShell": false,
"jdk.telemetry.enabled": true,
"gitlens.ai.model": "vscode",
"gitlens.ai.vscode.model": "copilot:gpt-5-mini",
"security.workspace.trust.untrustedFiles": "open",
"remote.SSH.remotePlatform": {
"aliyun-dev-host": "linux",
"home-dev-server": "linux"
},
"Lingma.aI Chat.commandAllowlistInAgentMode": "",
"http.proxy": "http://127.0.0.1:7897",
"makefile.configureOnOpen": true,
"cmake.showOptionsMovedNotification": false,
"cmake.pinnedCommands": [
"workbench.action.tasks.configureTaskRunner",
"workbench.action.tasks.runTask"
],
"terminal.integrated.enableMultiLinePasteWarning": "auto",
"cmake.configureOnOpen": false,
"git.confirmSync": false,
"python.analysis.typeCheckingMode": "standard",
"diffEditor.codeLens": true,
"gopls": {},
"workbench.settings.applyToAllProfiles": [],
"chat.agent.maxRequests": 100,
"go.testTags": "integration",
"editor.codeActionsOnSave": {},
"roo-cline.allowedCommands": [
"git log",
"git diff",
"git show"
],
"roo-cline.deniedCommands": [],
"http.systemCertificatesNode": true,
"geminicodeassist.inlineSuggestions.enableAuto": false,
"Lingma.aI Chat.webToolsInAsk/AgentMode": "Ask every time",
"workbench.secondarySideBar.showLabels": false,
"git.openRepositoryInParentFolders": "never",
"markdown-preview-enhanced.codeBlockTheme": "vue.css",
"window.customTitleBarVisibility": "windowed",
"chatgpt.localeOverride": "zh-CN",
"chatgpt.runCodexInWindowsSubsystemForLinux": false,
"chat.viewSessions.orientation": "stacked",
}