#pragma once /*************************HMI事件组态**************************/ #include #include #include // 事件触发器类型 enum class TriggerType { Click = 0, DoubleClick, RightClick, HoverEnter, HoverLeave, PropertyChange, Unknown }; QString triggerTypeToString(TriggerType type) { switch (type) { case TriggerType::Click: return "click"; case TriggerType::DoubleClick: return "double_click"; case TriggerType::RightClick: return "right_click"; case TriggerType::HoverEnter: return "hover_enter"; case TriggerType::HoverLeave: return "hover_leave"; case TriggerType::PropertyChange: return "property_change"; default: return "unknown"; } } TriggerType stringToTriggerType(const QString& str) { QMap mapping = { {"click", TriggerType::Click}, {"double_click", TriggerType::DoubleClick}, {"right_click", TriggerType::RightClick}, {"hover_enter", TriggerType::HoverEnter}, {"hover_leave", TriggerType::HoverLeave}, {"property_change", TriggerType::PropertyChange} }; return mapping.value(str, TriggerType::Unknown); } // 事件接口 class IConfigEvent { public: virtual ~IConfigEvent() = default; virtual void execute() = 0; virtual QString type() const = 0; virtual QJsonObject toJson() const = 0; virtual void fromJson(const QJsonObject& json) = 0; virtual IConfigEvent* clone() const = 0; }; // Panel可见性事件 class PanelVisibilityEvent : public IConfigEvent { QString panelId; bool visible = true; public: void setPanelId(const QString& id) { panelId = id; } void setVisible(bool v) { visible = v; } QString type() const override { return "panel_visibility"; } void execute() override { // 实现Panel控制逻辑 emit requestPanelControl(panelId, visible); } QJsonObject toJson() const override { return { {"type", type()}, {"panelId", panelId}, {"visible", visible} }; } void fromJson(const QJsonObject& json) override { panelId = json["panelId"].toString(); visible = json["visible"].toBool(); } IConfigEvent* clone() const override { auto event = new PanelVisibilityEvent(); event->panelId = panelId; event->visible = visible; return event; } signals: void requestPanelControl(const QString& panelId, bool visible); }; // 变量赋值事件 class VariableAssignmentEvent : public IConfigEvent { QString varName; QVariant value; public: void setVariableName(const QString& name) { varName = name; } void setValue(const QVariant& val) { value = val; } QString type() const override { return "variable_assignment"; } void execute() override { // 变量赋值逻辑 emit requestVariableAssignment(varName, value); } QJsonObject toJson() const override { return { {"type", type()}, {"variable", varName}, {"value", value.toString()} }; } void fromJson(const QJsonObject& json) override { varName = json["variable"].toString(); value = json["value"].toString(); } IConfigEvent* clone() const override { auto event = new VariableAssignmentEvent(); event->varName = varName; event->value = value; return event; } signals: void requestVariableAssignment(const QString& name, const QVariant& value); };