【问题标题】:Programmatically validate a QLineEdit以编程方式验证 QLineEdit
【发布时间】:2014-06-26 09:52:24
【问题描述】:

我有一个QLineEdit 和一个QDoubleValidator,调用QDoubleValidator::setRange 不会验证QLineEdit 的当前文本。
我如何以编程方式验证(通过鼠标工作聚焦和散焦)

这是我继承的QDoubleValidator的代码

DoubleValidator::DoubleValidator( QObject* parent ) : 
    Superclass( parent )
{    
}

DoubleValidator::~DoubleValidator()
{
}

void DoubleValidator::fixup ( QString & input ) const
{
    if( input.toDouble() > top() )
    {   
        input = QString::number( top() , 'f' );
    }   
    else if( input.toDouble() < bottom() )
    {   
        input = QString::number( bottom() , 'f' );
    }   
}

还有我继承的QLineEdit的代码:

DoubleLineEdit::DoubleLineEdit( QWidget* parent ) :
   Superclass( parent )
{
   _validator =  new DoubleValidator( this );
  this->setValidator( _validator );
}


DoubleLineEdit::~DoubleLineEdit()
{
}

void DoubleLineEdit::setRange( double min, double max )
{
    _validator->setRange( min, max, 1000 );
    validate();
}

void DoubleLineEdit::setTop( double top )
{
    _validator->setTop( top );
    validate();
}    

void DoubleLineEdit::setBottom( double bottom )
{
    _validator->setBottom( bottom );
    validate();
}

void DoubleLineEdit::validate()
{
    if( !hasAcceptableInput() )
    {
        cout<<"Validation needed"<<endl;
    }
}

当我调用DoubleLineEdit::setRange() 时,DoubleLineEdit 的当前文本未经过验证和修复。

DoubleLineEdit* edit = new DoubleLineEdit( this );
edit->setText("100");
edit->setRange( 0, 10);

使用此代码,edit-&gt;text() 仍将是 100,我希望它自动更改为 10。

我已经实现了一个有效的DoubleLineEdit::validate 方法:

void DoubleLineEdit::validate()
{
    if( !hasAcceptableInput() )
    {
        QFocusEvent* e = new QFocusEvent( QEvent::FocusOut );
        this->focusOutEvent( e );
        delete e;
    }
}

但这更像是一个技巧,也许有更好的解决方案。

【问题讨论】:

  • 什么意思? QDoubleValidator::setRange 是程序验证。我也不确定我是否理解重点/非重点部分。
  • 如果我用较低的顶部调用QDoubleValidator::setRange,QLineEdit 将不会调用QDoubleValidator::fixUp。然而,聚焦和不聚焦 QLineEdit 会调用它。到目前为止,最好的方法是致电QLineEdit::focusOutEvent
  • 您的问题不清楚,请发布您的代码。
  • 什么是“低顶”?你能用一句话概括你想要达到的目标吗?
  • 我希望我的 QLineEdit 在调用他的 QDoubleValidator::setRange 时验证和修复他的文本。

标签: qt qlineedit qvalidator


【解决方案1】:

尝试将您的 validate() 函数更改为:

void DoubleLineEdit::validate()
{
   if (!hasAcceptableInput())
   {
       QString t = text();
       _validator->fixUp(t);
       setText(t);
   }
}

【讨论】:

    猜你喜欢
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 2016-01-02
    相关资源
    最近更新 更多