#ifndef PARAMCONTROL_H #define PARAMCONTROL_H #include class QLabel; class QLineEdit; class QPushButton; class QHBoxLayout; // ===================== 参数调节控件 ===================== // 参数名 + 数值输入框(点击/回车弹出数字键盘,↑/↓ 按档加减)+ 保存按钮(可选)+ 恢复出厂值按钮(可选) // 旋钮接口 adjustByKnob():调大/调小,数值框的 ↑/↓ 走的就是这条路径 class ParamControl : public QWidget { Q_OBJECT public: explicit ParamControl(const QString& name, const QString& unit, double step, double min, double max, bool withSave, bool withFactory, QWidget* parent = nullptr); void setValue(double v); double value() const { return m_value; } void setEnabled(bool enabled); void setCentered(bool on); // 参数名与数值行水平居中(默认左对齐) QWidget* editor() const; // 数值输入框(供页面编排 Tab 顺序) public slots: // 旋钮接口:steps > 0 右旋调大、steps < 0 左旋调小;每格 = m_step void adjustByKnob(int steps); signals: void valueChanged(double v); void saveClicked(); void factoryResetClicked(); protected: bool eventFilter(QObject* obj, QEvent* ev) override; // 数值框:点击/回车 → 数字键盘,↑/↓ → 按档调值 private: void refresh(); void openNumPad(); QString m_name; QString m_unit; double m_step; double m_min; double m_max; double m_value; QLineEdit* m_valueEdit = nullptr; QLabel* m_unitLabel = nullptr; QLabel* m_nameLabel = nullptr; QHBoxLayout* m_valRow = nullptr; QPushButton* m_save = nullptr; QPushButton* m_factory = nullptr; }; #endif // PARAMCONTROL_H