在QSpinBox中禁用验证

时间:2014-03-24 13:02:51

标签: qt validation qspinbox

因此我有一个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();
}

1 个答案:

答案 0 :(得分:2)

Qt docs说:

  

如果lineEdit的QLineEdit :: validator()返回0,则为内部   旋转框的验证器将在行编辑中设置。

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

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();