我有一个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
。)
答案 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;