Files
QT_wuhan_YT/widgets/paramcontrol.h
T
2026-10-14 09:59:42 +08:00

59 lines
1.8 KiB
C++

#ifndef PARAMCONTROL_H
#define PARAMCONTROL_H
#include <QWidget>
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