geopro/src/app/PanelHeader.hpp

63 lines
2.5 KiB
C++
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.

#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