我寫在一個QT GUI項目自定義QValidator,和我的理解一個成員變量是,我需要延長QValidator類,這是因爲:寫在常量API函數(C++)
void setValidator(const QValidator *);
需要通過QValidator
子類。 的問題是功能:
virtual QValidator::State validate(QString& input, int& pos) const Q_DECL_OVERRIDE;
是常量,但我需要寫一個驗證的狀態在我的子類,我不能寫任何成員變量,因爲這個const屬性的。我怎樣才能解決這個API約束?
我在做這樣的事情:
QValidator::State IPv4Validator::validate(QString &input, int &pos) const
{
auto validationResult = QRegExpValidator::validate(input, pos);
// custom logic here:
myMemberVariable = something(validationResult);
// more logic
// more logic
// more logic
return validationResult;
}
提前感謝!
當您需要讓基本驗證改變對象的狀態時,您正在使用錯誤路徑™庫。它不應該。有許多技術變通方法(指向狀態的指針,'mutable'狀態,'const_cast',調用C代碼)但**不**。瞭解你如何使用Qt錯誤並修補你的方式。解決'const''問題就像在編譯器抱怨不兼容的類型時關閉C語言一樣。這表達了「不要告訴我一個可能的問題,因爲我真的知道我在做什麼」,當現實是相反的時候,會有很多悲傷的結果。 –
你不應該在QValidator中存儲狀態,因爲你可以對多個輸入使用同一個驗證器..。這對狀態是不可能的! – JvO
我明白你的觀點。很有意義 – androidu