QSpinBox有个比较啃爹的问题,不管取值范围设置为多少,都能一直输入0,如下图所示:
当取值范围包含负数时,负号后也可以一直输入0,如下图所示:
还有就是当取值范围设置为10以上时,比如10~100,却可以输入1~9
虽然上述非法输入最终都未生效,当QSpinBox失去焦点时会显示为正常值,但是给人的体验很不好。下面将重写QSpinBox的数据校验方法validate来解决此问题。
QHSpinBox.h
#ifndef QHSPINBOX_H
#define QHSPINBOX_H
#include <QSpinBox>
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