我有一个相当复杂的对话框,输入是具有不同允许范围的数字。我想知道什么是最干净的模式来保证我的QLineEdits具有正确的输入值。
这样做的明显方法似乎是在用户单击“确定”按钮时检查输入值。我遇到的问题是某些GUI控件依赖于其他输入的值。因此,对于输入错误值的所有情况,让我为控件的逻辑分支,代码似乎变得有点讨厌。
这种情况有不错的模式吗?
我在考虑继承QLineEdit并使用focusOutEvent来检查对话框的输入。如果输入不正确,我会默认值并触发逻辑。这将保证每个lineedit负责它自己的验证。这样做有明显的陷阱吗?
QValidators很棒,问题在于它们的状态是中间的。
答案 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对象生成的信号并单独验证。交朋友可能是个好主意。