#ifndef NUMPADDIALOG_H #define NUMPADDIALOG_H #include #include class QLineEdit; class QPushButton; class QGridLayout; class QVBoxLayout; // ===================== 数字键盘弹窗(模态) ===================== // 半透明遮罩 + 键盘面板:顶部输入回显,数字键 1-9、0,退格、清除,确认/取消 // 两种尺寸:默认大字版(密码页用)、紧凑版(参数输入用,setCompact(true)) class NumPadDialog : public QDialog { Q_OBJECT public: explicit NumPadDialog(QWidget* parent = nullptr); void setMaxLen(int n) { m_maxLen = n; } void setValue(const QString& v); QString value() const { return m_value; } void clear(); void setOpacity(qreal opacity); // 整体不透明度(默认 1.0) void setAnchorWidget(QWidget* ref, int gap = 20); // 面板贴参照控件左侧弹出 // 参数输入模式:回显显示实际数字(不掩码),并把“清除”键换成“小数点” void setParamMode(bool on); // 紧凑尺寸(按键/面板更小);默认 false = 大字版 void setCompact(bool on); private slots: void onDigit(const QString& d); void onBackspace(); void onClear(); void onDot(); private: void refreshEcho(); void placePanel(); void applySizes(); QWidget* m_panel = nullptr; QWidget* m_anchor = nullptr; // 定位参照控件(如参数输入框) QGridLayout* m_grid = nullptr; QVBoxLayout* m_panelLay = nullptr; QLineEdit* m_echo = nullptr; QVector m_digits; // 数字键 0-9 QPushButton* m_backKey = nullptr; QPushButton* m_clearKey = nullptr; QPushButton* m_okKey = nullptr; QPushButton* m_cancelKey = nullptr; QString m_value; int m_maxLen = 4; int m_gap = 20; bool m_paramMode = false; bool m_compact = false; }; #endif // NUMPADDIALOG_H