、私はQT GUIプロジェクトにカスタムQValidatorを書いていますし、私の理解では、私がQValidatorクラスを拡張する必要があるということである。なぜなら:書き込み
void setValidator(const QValidator *);
QValidator
サブクラスを渡す必要があります。 問題が関数ということである。
virtual QValidator::State validate(QString& input, int& pos) const Q_DECL_OVERRIDE;
がconstのですが、私は私のサブクラスで検証状態に書き込む必要がある、と私はこのために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;
}
感謝を事前に!
基本的な検証によってオブジェクトの状態が変更される必要がある場合は、Wrong Way™でライブラリを使用しています。それはしないでください。技術的な回避策(状態へのポインタ、 'mutable'状態、' const_cast'、Cコードの呼び出し)がありますが、**はありません**。どのようにQtを誤って使用しているのかを調べ、あなたのやり方を修正してください。 'const' -nessを回避することは、コンパイラーが互換性のない型を黙ってシャットダウンするときにCのキャストをドロップするのと同じです。それは、現実が反対で、悲しみの結果が多いときに、「私が実際にやっていることを本当に知っているので、起こりそうな問題について私に教えてはいけません。 –
複数の入力に対して同じバリデータを使うことができるので、状態をQValidatorに格納しないでください。状態では不可能です! – JvO
私はあなたのポイントを見ます。 – androidu