QSpinBox有个比较啃爹的问题,不管取值范围设置为多少,都能一直输入0,如下图所示:

当取值范围包含负数时,负号后也可以一直输入0,如下图所示:

还有就是当取值范围设置为10以上时,比如10~100,却可以输入1~9
虽然上述非法输入最终都未生效,当QSpinBox失去焦点时会显示为正常值,但是给人的体验很不好。下面将重写QSpinBox的数据校验方法validate来解决此问题。
QHSpinBox.h
- #ifndef QHSPINBOX_H
- #define QHSPINBOX_H
-
- #include
-
- class QHSpinBox : public QSpinBox
- {
- public:
- explicit QHSpinBox(QWidget *parent = nullptr);
- QValidator::State validate(QString &input, int &pos) const override;
- };
-
- #endif // QHSPINBOX_H
QHSpinBox.cpp
- #include "QHSpinBox.h"
-
- QH