|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
#include <QObject>
|
|
|
|
|
|
#include <QMap>
|
|
|
|
|
|
#include <QString>
|
|
|
|
|
|
#include <QStringList>
|
|
|
|
|
|
#include <QVariant>
|
|
|
|
|
|
#include "nmData_global.h"
|
|
|
|
|
|
|
|
|
|
|
|
class nmDataAttribute;
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief 属性注册表,作为 UI 与数据层的双向同步中介
|
|
|
|
|
|
/// @note 每个分析窗口(nmDataAnalyzeManager)持有一个实例
|
|
|
|
|
|
/// name 对齐 XML ParaItem Name(如 "Pi", "K", "h")
|
|
|
|
|
|
/// nmDataReservoir/nmSubWndUtils 不需任何修改
|
|
|
|
|
|
class NM_DATA_EXPORT nmAttrRegistry : public QObject
|
|
|
|
|
|
{
|
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
explicit nmAttrRegistry(QObject* parent = nullptr);
|
|
|
|
|
|
~nmAttrRegistry();
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief 注册属性,name 对齐 XML ParaItem Name
|
|
|
|
|
|
/// @param name 参数名(如 "Pi", "K", "h")
|
|
|
|
|
|
/// @param pAttr nmDataAttribute 指针(不拥有所有权)
|
|
|
|
|
|
void regAttr(QString name, nmDataAttribute* pAttr);
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief 清除所有注册(重建数据对象时调用)
|
|
|
|
|
|
void clear();
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief 批量读取属性值(初始化面板用)
|
|
|
|
|
|
/// @param names 参数名列表
|
|
|
|
|
|
/// @return name→value 映射,未找到的跳过
|
|
|
|
|
|
QMap<QString, QVariant> collect(const QStringList& names) const;
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief 批量通知所有已注册属性刷新 UI(外部批量修改数据后调用)
|
|
|
|
|
|
void refreshAll();
|
|
|
|
|
|
|
|
|
|
|
|
public slots:
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief UI→Data 方向:按 name dispatch 到 nmDataAttribute::setValue
|
|
|
|
|
|
/// @note 内部设置 m_bSyncing=true 防循环
|
|
|
|
|
|
void setValue(QString name, QVariant value);
|
|
|
|
|
|
|
|
|
|
|
|
signals:
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief Data→UI 方向:属性变更通知,携带 name 和新值
|
|
|
|
|
|
void sigAttrChanged(QString name, QVariant value);
|
|
|
|
|
|
|
|
|
|
|
|
private slots:
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief 监听 nmDataAttribute::sigValueChanged,用 sender() 反查 name
|
|
|
|
|
|
void onAttrValueChanged();
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief 监听 nmDataAttribute::destroyed,自动清理映射
|
|
|
|
|
|
void onAttrDestroyed(QObject* pObj);
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
|
|
|
|
QMap<QString, nmDataAttribute*> m_nameToPtr; // name → ptr
|
|
|
|
|
|
QMap<nmDataAttribute*, QString> m_ptrToName; // ptr → name(sender 反查用)
|
|
|
|
|
|
bool m_bSyncing; // 防循环标记
|
|
|
|
|
|
};
|