c – 带QValidator的QLineEdit:无论输入有效性如何,都对编辑完
QLineEdit有一个信号QLineEdit :: editingFinished,在用户完成编辑时会发出,例如按Enter键.但是,如果设置了验证器或输入掩码,则只有在输入有效时才会发出editingFinished.
但是,无论输入的有效性如何,我如何对完成编辑的用户做出反应?我是否必须手动检查输入,返回,小部件失去焦点等? 原因是:我想创建一个自定义小部件,用于使用QDoubleValidator编辑数字.当用户完成编辑并且输入无效(范围错误,空文本……)时,我想将其重置为某个有效的默认值.像这样的东西: class NumberEdit: public QLineEdit { public: NumberEdit(double min,double max) { setValidator(new QDoubleValidator(min,max,10)); setText(QString::number(min)); connect(this,/* this is the problem */,[this,min]() { if(!hasAcceptableInput()) setText(QString::number(min)); // Reset to valid number }); } }; 解决方法
我认为你真的不需要继承QLineEdit.
在没有
由于您使用的是 该类应如下所示: class MyDoubleValidator : public QDoubleValidator{ public: explicit MyDoubleValidator(QObject* parent= nullptr) :QDoubleValidator(parent){} MyDoubleValidator(double bottom,double top,int decimals,QObject* parent=nullptr) :QDoubleValidator(bottom,top,decimals,parent){} virtual void fixup(QString& input)const override{ input= QString::number(bottom(),'f',decimals()); } }; 这样,您可以将验证器与任何QLineEdit一起使用,如下所示: lineEdit->setValidator(new MyDoubleValidator(100,200,2,lineEdit)); 请注意,这样每次编辑后lineEdit都会发出 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |