2012-12-05 50 views
1

我想立即驗證我的編輯行。我想在離開編輯行字段後立即告訴用戶他輸入的值可能不正確。立即驗證和編輯已完成信號

所以我將edit edit和editFinished()信號連接起來。然而,問題在於,當我單擊行編輯外時,信號不會發出,例如,當我單擊對話框時。當我點擊對話框上的其他行編輯時,它就會發出。所以我正在尋找每次在編輯線外單擊時發出的信號。我怎樣才能做到這一點?

connect(mLineEdit, SIGNAL(editingFinished()), this, SLOT(Validate())) 

MyDlg::Validate() 
{ 
    QString text = mLineEdit->text(); 
    bool isValid = check_if_valid(text); 
    if(!isValid) 
     // set the color of edit line to be red   
} 

回答

2

首先,考慮使用QValidator實現你的行編輯進行驗證(QIntValidatorQDoubleValidator,或QRegExpValidator)。您可以使用QLineEdit::setValidator(QValidator*)安裝驗證程序。如果其中一個驗證器不適合你,那麼通過繼承QValidator並提供validate的實現,然後在行編輯中安裝自己的自定義驗證器,可以考慮編寫自己的驗證器。

如果沒有完成所有這些,您可以按照上述步驟繼續操作,但需要聽取textChanged(const QString&)信號或textEdited(const QString&)信號(即使編輯文本以編程方式更改,也會發出前一個信號,而後者不是)。