gpt4 book ai didi

c++ - 在 qt 中使用行编辑时进行年龄验证

转载 作者:太空宇宙 更新时间:2023-11-04 13:58:30 25 4
gpt4 key购买 nike

大家好,我在这里遇到了另一个问题,这是我的示例代码:

QValidator *m_validator = new QIntValidator(18, 75, this);
QLineEdit *m_edit = new QLineEdit(this);
m_edit->setValidator(m_validator);

这里的问题是我不想使用 SpinBox,我只想验证这个 lineEdit 但这里是范围在范围内不起作用意味着如果我给 1 它也让我知道 lineEdit 可以通过单个字符在键盘输入上工作。但我需要从 lineEdit 获取整数并验证它 我尝试将 SIGNAL 作为:

void    editingFinished ()

但问题仍然存在,它无法验证我的年龄。

最佳答案

你最好的选择可能是像这样子类化 QValidator:

qagevalidator.h

class QAgeValidator : public QValidator
{
Q_OBJECT
Q_DISABLE_COPY(QAgeValidator )

quint16 low, high;

public:
explicit QAgeValidator(quint16 low, quint16 high, QObject *parent = 0);
virtual ~QAgeValidator();

virtual QValidator::State validate(QString &, int &) const;
virtual void fixup(QString &) const;
};

然后像这样重新实现虚函数:

QValidator::State QAgeValidator::validate(QString &input, int &) const
{
if (input.isEmpty())
return Acceptable;

quint16 i = input.toInt();
if (!isdigit(i) || (i < low || i > high))
return Invalid;

return Acceptable;
}

这是您应该进行年龄验证的地方:

void QAgeValidator::fixup(QString &input) const
{
QString final;

for (int i = 0; i < input.length(); ++i) {
QChar c = input.at(i);
if (c.isDigit())
final += c;
}

input = final;
}

关于c++ - 在 qt 中使用行编辑时进行年龄验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20281049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com