Qt 在QSpinBox中禁用验证

Qt 在QSpinBox中禁用验证,qt,validation,qspinbox,Qt,Validation,Qspinbox,因此,我有一个QSpinBox,并希望取消验证,以便不仅写入int值,而且写入其中的字符串。 请帮我把这个修好。 我尝试过这个,但不起作用: class Spinbox:public QSpinBox { public: Spinbox(QWidget* parent=0) :QSpinBox(parent){} void setLineEdit(QLineEdit *l) { QSpinBox::setLineEdit(l);

因此,我有一个QSpinBox,并希望取消验证,以便不仅写入int值,而且写入其中的字符串。 请帮我把这个修好。 我尝试过这个,但不起作用:

class Spinbox:public QSpinBox
{
public:

    Spinbox(QWidget* parent=0)
        :QSpinBox(parent){}
    void setLineEdit(QLineEdit *l)
    {
        QSpinBox::setLineEdit(l);
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Spinbox de;
    QLineEdit le;
    le.setValidator(0);
    le.setText("text");
    de.setLineEdit(&le);
    de.show();

    return a.exec();
}
Qt文档说:

如果lineEdit的QLineEdit::validator()返回0,则内部 spinbox的验证程序将在编辑行上设置

因此,为了禁用QSpinBox的内置验证器,您需要设置自己的验证器(dummy?)。即


@EduardRostomyan使用您自己的验证器而不是QIntValidator。@EduardRostomyan,我已经更新了我的答案并添加了一个虚拟验证器,允许在编辑行中设置任何内容。
class Validator : public QValidator
{
public:
    State validate(QString &input, int &pos ) const
    {
        return QValidator::Acceptable;
    }
};

[..]

Spinbox de;
QLineEdit le;
le.setValidator(new Validator());
le.setText("text");
de.setLineEdit(&le);
de.show();