#pragma once // 面板自绘表头(对齐原型): // - buildPanelHeader:图标 + 标题 + (可选数量徽标) + 右侧操作按钮(标准面板)。 // - buildTabbedPanel:表头为若干 Tab(图标+标题+可选徽标)+ 右侧操作按钮,下方堆叠对应内容。 // 由调用方放在面板内容顶部,并隐藏 ADS 自带标题栏,从而完全掌控表头外观。 // 操作按钮当前为静态占位(tooltip 标注),后续接真实功能。 #include #include #include #include "Glyphs.hpp" class QWidget; class QLabel; class QToolButton; class QButtonGroup; namespace geopro::app { // 一个表头操作项:图标 + 提示文案。 using HeaderAction = QPair; // 标准面板表头。标题 QLabel objectName="panelTitle"、徽标 QLabel objectName="panelBadge" // (默认隐藏),调用方可经 container->findChild 动态更新。 QWidget* buildPanelHeader(Glyph icon, const QString& title, const QVector& actions = {}); // 一个 Tab 规格:图标 + 标题 + 内容 + 是否带数量徽标。 struct PanelTab { Glyph icon; QString title; QWidget* content; bool hasBadge; }; // 带 Tab 表头的面板构建结果:容器 + 各 Tab 的徽标标签(无徽标处为 nullptr,供动态更新) // + Tab 互斥按钮组(idClicked(int),供调用方监听页签切换做懒加载等)。 struct TabbedPanel { QWidget* container; QVector badges; QButtonGroup* tabGroup = nullptr; }; // 构建带 Tab 表头的面板(首个 Tab 默认激活;点击 Tab 切换下方堆叠内容)。 TabbedPanel buildTabbedPanel(const QVector& tabs, const QVector& actions = {}); // 分段切换表头构建结果:表头容器 + 各分段按钮(互斥,首个默认激活,供调用方接 clicked)。 struct SegmentedHeader { QWidget* header; QVector buttons; }; // 构建「分段切换表头」:一行 Tab 风格互斥按钮(与异常/属性页签同款:选中=强调色文字 + 2px // 强调色下划线)+ 右侧操作按钮。表头底/高度/边框与 buildTabbedPanel 完全一致;内容由调用方 // 自行 addWidget 到表头下方(不建堆叠,因 2D/3D 共用同一画布部件)。 SegmentedHeader buildSegmentedHeader(const QVector& segments, const QVector& actions = {}); } // namespace geopro::app