Qt验证器-我如何拒绝中间结果

Qt Validators - how do I reject intermediate results?

本文关键字:拒绝 中间 结果 何拒绝 验证 Qt      更新时间:2023-10-16

据我所知,验证器可以返回三个结果:Invalid、Intermediate和Acceptable。假设我的行编辑有一个regexp验证器集,使用以下正则表达式:

[ab][cd]

因此,有效值为:ac, ad, bc, bd:

如果我尝试输入任何其他字符,例如e0,行编辑将不允许我输入它。但是,如果我输入a并切换到另一个控件,它将没有问题,尽管a的值是不可接受的,而是中间值。

这就是我想要的。我希望行编辑拒绝我切换焦点到任何其他控件,如果它的输入是不可接受的。也就是说,我需要输入一行完全满足正则表达式的代码,以便切换焦点。否则,我希望我的表单/对话框等拒绝我切换焦点的能力。

是否有一个简单的单行方法来做到这一点,或者我必须手动做到这一点?如果是后者,标准的做法是什么?

有一个QApplication::focusChanged()信号。您可以捕捉到这种情况,如果您的小部件的结果是有效的或中间的,则显式地检查它,并采取适当的操作。

我不知道一个单行的解决方案,但它可能仍然存在。我的解决办法是更手动一点。

参见当一个小部件失去焦点时的信号是什么?