2

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

1 回答 1

2

Qt 文档说:

如果 lineEdit 的 QLineEdit::validator() 返回 0,则旋转框的内部验证器将在 line edit 上设置。

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

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();
于 2014-03-24T13:07:48.963 回答