2016-10-11 53 views
2

我有一个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()验证器返回AcceptableIntermediate被执行。只有当输入的值确实有效时,我如何才能执行插槽(Acceptable)。或者,我如何检查onTextChanged()插槽中的验证状态? (奇怪的是,我注意到,cb->validator()似乎总是返回nullptr。)

+0

“我已经注意到le-> validator()参见ms总是返回nullptr“le或cb?您也可以将验证器指针保存在成员变量中。 –

+0

@FrankOsterfeld问题已修复! – mimo

+0

尝试将'QDoubleValidator'的父项设置为'QComboBox cb'而不是'this'。 – RedX

回答

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; 
+0

有没有办法从QComboBox实例访问验证器? – mimo

+0

是的,http://doc.qt.io/qt-4.8/qcombobox.html#validator查看最后更改 – mohabouje

+0

但是,正如我在问题中提到的那样,validator()返回一个空指针。事实上,它不仅在插槽中,而且在我使用cb-> setValidator(新QDoubleValidator(0.0,100.0,2,this))设置验证器后立即检查它;''。 – mimo

相关问题