# Application::SwitchProject **命名空间**: `XCEngine::Editor` **类型**: `method` **源文件**: `editor/src/Application.h` ## 签名 ```cpp bool SwitchProject(const std::string& projectPath); ``` ## 作用 切换当前 Editor 宿主壳所绑定的项目根目录,并同步刷新布局会话、工作目录、资源根、脚本运行时和窗口标题。 ## 当前实现行为 - 当前没有 `EditorContext` 或传入路径为空时直接返回 `false`。 - 首先调用: ```cpp const bool hasSavedDockLayout = m_imguiSession.SetProjectPath(projectPath); ``` - 然后把 `EditorContext` 中的项目路径更新为新路径。 - 接着尝试切换进程工作目录到该项目根,并输出日志。 - 随后执行: - `ResourceManager::Get().SetResourceRoot(projectPath.c_str())` - `InitializeScriptingRuntime(projectPath)` - 最后清空 `m_lastWindowTitle` 并重新调用 `UpdateWindowTitle()`。 - 若目标项目没有保存过 dock 布局,会通过 `EventBus` 发布 `DockLayoutResetRequestedEvent`。 ## 返回值 - `true`: 成功完成这次宿主级项目切换。 - `false`: 缺少 `EditorContext` 或传入路径为空。 ## 设计含义 - 当前项目切换不是单纯改一条路径字符串,而是一次宿主级上下文切换。 - 它同时影响: - ImGui 布局会话 - 资源根 - 脚本运行时 - 窗口标题 ## 相关文档 - [Application](Application.md) - [Initialize](Initialize.md) - [ReloadScriptingRuntime](ReloadScriptingRuntime.md)