1

我想立即验证我的编辑行。我想在他离开编辑行字段后立即告诉用户他输入的值可能不正确。

所以我将行编辑与editingFinished() 信号连接起来。但是问题是当我在行编辑之外单击时不会发出信号,例如当我只是单击对话框时。当我单击对话框上的其他行编辑时会发出它。所以我正在寻找每次在编辑线外单击时发出的信号。我怎样才能做到这一点?

connect(mLineEdit, SIGNAL(editingFinished()), this, SLOT(Validate()))

MyDlg::Validate()
{
     QString text = mLineEdit->text();
     bool isValid = check_if_valid(text);
     if(!isValid)
         // set the color of edit line to be red        
}
4

1 回答 1

2

首先,考虑使用QValidator带有行编辑的实现来执行验证(QIntValidatorQDoubleValidatorQRegExpValidator)。您可以使用QLineEdit::setValidator(QValidator*). 如果其中一个验证器不适合您,最好考虑通过子类QValidator化并提供 的实现来编写您自己的验证器validate,然后在行编辑中安装您自己的自定义验证器。

如果所有这些都失败,您可以像上面那样继续,但是您需要收听textChanged(const QString&)信号或textEdited(const QString&)信号(即使以编程方式更改行编辑文本也会发出前者,而后者则不会)。

于 2012-12-05T17:52:46.740 回答