如何检查小部件值是否“可接受”?

时间:2016-10-11 05:55:16

标签: c++ qt validation

我有一个QComboBox,其中包含与之关联的验证码:

QComboBox* cb = new QComboBox;
// ...
cb->setValidator(new QDoubleValidator(0.0, 100.0, 2, this));

此窗口小部件连接到一个插槽,当输入的值发生更改(currentTextChanged())时,该插槽将被执行。

connect(cb, SIGNAL(currentTextChanged(QString)),
        this, SLOT(onTextChanged(QString)));

在此配置中,当验证程序返回onTextChanged()Acceptable时,将执行Intermediate。如果输入的值确实有效(Acceptable),我该如何执行插槽。或者,我如何检查onTextChanged()插槽中的验证状态? (奇怪的是,我注意到cb->validator()似乎总是返回nullptr。)

1 个答案:

答案 0 :(得分:1)

将新验证器附加到您的组合框:

QComboBox* cb = new QComboBox;
QDoubleValidator* validator = new QDoubleValidator(0.0, 100.0, 2, this);
cb->setValidator(validator);

连接您的信号/插槽:

connect(cb, SIGNAL(currentTextChanged(QString)),
        this, SLOT(onTextChanged(QString)));

在插槽中,首先检查当前文本是否有效:

int pos = cb->currentIndex();
const QDoubleValidator* validator = qobject_cast<const QDoubleValidator*>(cb->validator());
QValidator::State state = validator->validate(txt, pos);
if (state != QValidator::Acceptable)
   return;