检查QT输入的输入

Checking input of QT inputs

本文关键字:输入 QT 检查      更新时间:2023-10-16

我有一个相当复杂的对话框,其中的输入是具有不同允许范围的数字。我想知道什么是最干净的模式来保证我的QLineEdits具有正确的输入值。

显而易见的方法似乎是在用户单击"确定"按钮时检查输入值。我遇到的问题是,一些GUI控件依赖于其他输入的值。因此,让我将控件的逻辑分支到所有输入值错误的情况下,代码似乎变得有点糟糕。

这种情况有好的模式吗?

我正在考虑将QLineEdit子类化,并使用focusOutEvent来检查对话框的输入。如果输入不正确,我会默认值并触发逻辑。这将保证每个lineedit都负责自己的验证。这样做有明显的陷阱吗?

QValidator非常棒,问题是当它们的状态处于中间时。

使用QLineEdit提供的信号,构建一个小的插槽验证类。这将比直接对它们进行子类化更容易,并允许进行更细粒度的控制。

您可以很好地使用子类化QLineEdit,因为只需设置与适当信号的连接就很容易了。

class foo : public QLineEdit
{
Q_OBJECT
// ... staff here
private:
void signal_control()
{
connect(this,SIGNAL(textChanged(const QString & )),this, SLOT(text_validate(const QString & )));
private slots:
void text_validate(const QString &)
{
// validate your text here
}
};

您还可以构建一个不同的类,该类只侦听QLineEdit对象生成的信号并单独进行验证。交朋友可能是个好主意。