我在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;
}
提前致谢!
答案 0 :(得分:3)
您可以通过声明成员变量const
或使用mutable
(不安全)来在const_cast
函数中编写成员变量。
struct A {
void foo() const {
a = 3;
const_cast<A*>(this)->b = 4;
}
mutable int a;
int b;
};
答案 1 :(得分:0)
阅读完评论后,我意识到我需要将自定义逻辑委托给QValidator
子类。谢谢您的反馈!他们帮助我理解我做错了什么。