refactor/pure-qt-ui #3
|
|
@ -0,0 +1,28 @@
|
|||
# 第三方组件与许可证 (Third-Party Notices)
|
||||
|
||||
本项目(geopro / Geopro 3.0 桌面端)使用了以下第三方开源组件。各组件版权归其各自作者所有,
|
||||
按其各自许可证条款分发。
|
||||
|
||||
| 组件 | 用途 | 许可证 | 来源 |
|
||||
|---|---|---|---|
|
||||
| **Qt 6** (6.11.x) | GUI 框架(Widgets/Gui/Core/Network/Svg/OpenGL 等) | LGPL-3.0(亦提供商业许可) | https://www.qt.io |
|
||||
| **VTK** (9.x) | 三维/二维可视化渲染 | BSD-3-Clause | https://vtk.org |
|
||||
| **Qt-Advanced-Docking-System** (4.3.1) | 停靠面板布局 | LGPL-2.1 | https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System |
|
||||
| **ElaWidgetTools** | Fluent UI 控件(菜单/列表/表单/图标等) | MIT | https://github.com/Liniyous/ElaWidgetTools (Qt6.10+ 支持取自 fork https://github.com/RainbowCandyX/ElaWidgetTools) |
|
||||
| **QtKeychain** (0.14.0) | 凭证安全存取("记住登录") | BSD-3-Clause | https://github.com/frankosterfeld/qtkeychain |
|
||||
|
||||
## 许可证要点
|
||||
|
||||
- **Qt 6 / Qt-Advanced-Docking-System(LGPL)**:本项目以动态链接方式使用 Qt 与 ADS,符合 LGPL
|
||||
对动态链接的要求;如需替换这些库,最终用户可自行替换对应动态库。若改为静态链接或分发修改版,
|
||||
需遵循 LGPL 的相应义务(提供目标代码/重新链接能力)。
|
||||
- **ElaWidgetTools(MIT)**:以静态库方式集成;MIT 允许静态链接与闭源分发,需保留版权声明与许可证文本。
|
||||
- **VTK / QtKeychain(BSD-3-Clause)**:需在分发物中保留版权声明与许可证文本,不得用作者名背书。
|
||||
|
||||
> 各组件完整许可证文本随其源码分发(FetchContent 拉取于 build 目录的 `_deps/<组件>-src/`,
|
||||
> 或随 Qt/VTK 安装目录)。如需在发行包中附带完整 LICENSE 文本,请从对应来源复制。
|
||||
|
||||
## ElaWidgetTools 版本钉定
|
||||
|
||||
为保证可复现构建,ElaWidgetTools 钉定到提交
|
||||
`b80eadc4a199186e14656dce09959b3216a593be`(见 `CMakeLists.txt` 的 `FetchContent_Declare(elawidgettools ...)`)。
|
||||
|
|
@ -1099,49 +1099,35 @@ int main(int argc, char* argv[])
|
|||
geopro::data::ApiProjectRepository projectRepo(api);
|
||||
geopro::controller::WorkbenchNavController nav(projectRepo);
|
||||
|
||||
// ── 外壳选择(P1 迁移,可回退):GEOPRO_UI_SHELL=ela → Fluent ElaWindow 壳;
|
||||
// 未设/其它 → 经典 QMainWindow 壳。两者都复用同一 buildWorkbench(QMainWindow&)。
|
||||
// Ela 壳策略:ElaWindow 用 setCentralCustomWidget 包裹一个承载工作台的内层 QMainWindow
|
||||
// (buildWorkbench 依赖 QMainWindow 的 setCentralWidget/setMenuWidget/statusBar,
|
||||
// ── 外壳:Fluent ElaWindow(唯一路径)。ElaWindow 用 addPageNode 包裹一个承载工作台的内层
|
||||
// QMainWindow(buildWorkbench 依赖 QMainWindow 的 setCentralWidget/setMenuWidget/statusBar,
|
||||
// ElaWindow 自身将其设为私有,故用内层 QMainWindow 承接,零改 buildWorkbench)。
|
||||
const QString kTitle = QStringLiteral("Geopro 3.0 — 项目分析视图 (M1)");
|
||||
QWidget* topLevel = nullptr;
|
||||
if (qEnvironmentVariable("GEOPRO_UI_SHELL") == QLatin1String("ela")) {
|
||||
auto* ela = new ElaWindow;
|
||||
ela->setWindowTitle(kTitle);
|
||||
ela->resize(1280, 800);
|
||||
ela->setMinimumSize(1024, 680);
|
||||
ela->setIsNavigationBarEnable(false); // 纯中心内容,不显示左侧导航栏
|
||||
ela->setAppBarHeight(38); // 默认 45 偏大,收紧标题栏更接近原生
|
||||
auto* inner = new QMainWindow(ela); // 以 ela 为父,避免无父期调色板/DPI 抖动(review H3)
|
||||
auto* inner = new QMainWindow(ela); // 以 ela 为父,避免无父期调色板/DPI 抖动
|
||||
buildWorkbench(*inner, repo, projectRepo, nav);
|
||||
// 用 addPageNode 把工作台作为唯一页面放进中心页栈(填满到底边)。
|
||||
// 注意:不能用 setCentralCustomWidget——它把控件插到页栈容器“之上”,空页栈仍占底部,
|
||||
// 导致状态栏不贴底边(见 ElaCentralStackedWidget::setCustomWidget 的 insertWidget(0,...))。
|
||||
ela->addPageNode(kTitle, inner);
|
||||
|
||||
// ── P2 主题桥:ElaTheme 明/暗切换 → 同步全局 QSS+调色板(覆盖所有标准控件与 ADS)。
|
||||
// Ela 自家控件由 ElaTheme 自动换肤;这里补齐非 Ela 面。也确定了主题最终态(解 review C2)。
|
||||
// 主题桥:ElaTheme 明/暗切换 → 同步全局 QSS+调色板(覆盖所有标准控件与 ADS)。
|
||||
QObject::connect(eTheme, &ElaTheme::themeModeChanged, ela, [&app](ElaThemeType::ThemeMode m) {
|
||||
geopro::app::applyThemeMode(app, m == ElaThemeType::Dark);
|
||||
});
|
||||
geopro::app::applyThemeMode(app, eTheme->getThemeMode() == ElaThemeType::Dark); // 初始对齐
|
||||
// 主题切换快捷键 Ctrl+Shift+T(正式切换入口待 P3 TopBar Ela 化后加按钮)。
|
||||
// 主题切换快捷键 Ctrl+Shift+T(标题栏亦有 Ela 自带的明暗切换键)。
|
||||
auto* themeSc = new QShortcut(QKeySequence(QStringLiteral("Ctrl+Shift+T")), ela);
|
||||
QObject::connect(themeSc, &QShortcut::activated, ela, [] {
|
||||
eTheme->setThemeMode(eTheme->getThemeMode() == ElaThemeType::Light ? ElaThemeType::Dark
|
||||
: ElaThemeType::Light);
|
||||
});
|
||||
topLevel = ela;
|
||||
} else {
|
||||
auto* window = new QMainWindow;
|
||||
window->setWindowTitle(kTitle);
|
||||
window->resize(1280, 800);
|
||||
window->setMinimumSize(1024, 680); // 防止停靠面板被压到不可用尺寸
|
||||
buildWorkbench(*window, repo, projectRepo, nav);
|
||||
topLevel = window;
|
||||
}
|
||||
topLevel->show();
|
||||
ela->show();
|
||||
|
||||
nav.start(); // 进入工作台后拉真实 空间/项目/结构
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue