2014-03-24 64 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