2014-03-24 73 views
2

因此,我有一个QSpinBox,并且想要取消设置验证,不仅要写入int值,还要写入字符串。 请帮我解决这个问题。 我已经试过这一点,但它不工作:在QSpinBox中禁用验证

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

回答

2

的Qt文档说:

如果QLineEdit的::验证()为lineEdit返回0,内部 验证纺纱器的将在行编辑中设置。

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

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

再次它不起作用,我仍然不能用字符串编辑它。 –

+0

@EduardRostomyan使用您自己的验证器而不是QIntValidator。 – vahancho

+0

@EduardRostomyan,我已经更新了我的答案并添加了一个虚拟验证程序,允许在行编辑中设置任何内容。 – vahancho