检查QT输入的输入

时间:2015-12-15 21:28:21

标签: c++ qt

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

这样做的明显方法似乎是在用户单击“确定”按钮时检查输入值。我遇到的问题是某些GUI控件依赖于其他输入的值。因此,对于输入错误值的所有情况,让我为控件的逻辑分支,代码似乎变得有点讨厌。

这种情况有不错的模式吗?

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

QValidators很棒,问题在于它们的状态是中间的。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

您可以很好地使用子类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对象生成的信号并单独验证。交朋友可能是个好主意。