gpt4 book ai didi

qt - 以编程方式验证 QLineEdit

转载 作者:行者123 更新时间:2023-12-05 05:26:43 25 4
gpt4 key购买 nike

我有一个带有 QDoubleValidatorQLineEdit,调用 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;
}
}

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

最佳答案

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

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

关于qt - 以编程方式验证 QLineEdit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24427400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com