考虑这个问题 .
我的工具中有一个QLineEdit,我应该按如下方式组织支持 . LineEdit的文本必须只包含双值,将我的逗号分开 . F.E. 6.2,8,9.0,55我也必须验证,用户不能输入任何其他字符而是数字和昏迷 . 另外我应该编写一个将此文本转换为向量的方法 . 最初我想到了QRegExp和boost :: spirit . 但使用这些技术可能很难 .
有任何想法吗?
使用下一个自定义验证器 .
Headers :
#ifndef VALIDATOR_H #define VALIDATOR_H #include <QValidator> class Validator : public QValidator { Q_OBJECT public: explicit Validator(QObject *parent = 0); signals: public slots: public: QValidator::State validate(QString & input, int & pos) const; }; #endif // VALIDATOR_H
CPP:
#include "validator.h" #include <QDoubleValidator> #include <QDebug> Validator::Validator(QObject *parent) : QValidator(parent) { } QValidator::State Validator::validate(QString &input, int &pos) const { qDebug() << input<< pos; QDoubleValidator val; val.setLocale(QLocale(QLocale::German,QLocale::Germany)); input.remove(" "); QStringList list = input.split(","); foreach ( QString var, list) { int i = 0; if(val.validate(var,i) == QValidator::Invalid) return QValidator::Invalid; } return QValidator::Acceptable; }
用法:
ui->lineEdit->setValidator(new Validator);
关于: val.setLocale(QLocale(QLocale::German,QLocale::Germany)); 的说明
val.setLocale(QLocale(QLocale::German,QLocale::Germany));
你说你想要使用 6.2,... 但是 . 和 , 在不同的国家是不同的小数点 . 所以我根据你的问题写了相应的例子 . 德国语言环境总是认为 . 是正确的观点 .
6.2,...
.
,
但我建议你使用特定于语言环境的小数点并用于此目的;作为分隔符而不是昏迷 .
有错误,所以试试这个 . 编辑(改善):
QValidator::State Validator::validate(QString &input, int &pos) const { qDebug() << input<< pos; QRegExpValidator reg(QRegExp("[0-9]+(\\.[0-9]+)?$")); input.remove(" "); if(input.contains(",,") || input.startsWith(",")) return QValidator::Invalid; QStringList list = input.split(","); qDebug()<< list; bool isOk = true; foreach ( QString var, list) { int i = 0; if(reg.validate(var,i) == QValidator::Invalid) return QValidator::Invalid; if(reg.validate(var,i) == QValidator::Intermediate) isOk = false; } if(isOk) return QValidator::Acceptable; else return QValidator::Intermediate; }
1 回答
使用下一个自定义验证器 .
Headers :
CPP:
用法:
关于:
val.setLocale(QLocale(QLocale::German,QLocale::Germany));
的说明你说你想要使用
6.2,...
但是.
和,
在不同的国家是不同的小数点 . 所以我根据你的问题写了相应的例子 . 德国语言环境总是认为.
是正确的观点 .但我建议你使用特定于语言环境的小数点并用于此目的;作为分隔符而不是昏迷 .
有错误,所以试试这个 . 编辑(改善):