我有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->text()
仍为100,我希望自动更改为10.
我已经实施了一个有效的DoubleLineEdit::validate
方法:
void DoubleLineEdit::validate()
{
if( !hasAcceptableInput() )
{
QFocusEvent* e = new QFocusEvent( QEvent::FocusOut );
this->focusOutEvent( e );
delete e;
}
}
但它更像是一种技巧,而且可能有更好的解决方案。
答案 0 :(得分:1)
尝试将validate()
功能更改为:
void DoubleLineEdit::validate()
{
if (!hasAcceptableInput())
{
QString t = text();
_validator->fixUp(t);
setText(t);
}
}