2

を呼び出しQLineEditても、 の現在のテキストは検証されません。 プログラムで検証するにはどうすればよいですか (マウス操作でフォーカスとフォーカス解除)QDoubleValidatorQDoubleValidator::setRangeQLineEdit

ここに私の継承のコードがあります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->text()は 100 のままなので、自動的に 10 に変更したいと思います。

私は作業DoubleLineEdit::validate方法を実装しました:

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

しかし、それは単なるトリックであり、より良い解決策があるかもしれません。

4

1 に答える 1