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