在日常开发过程中QLineEdit作为输入框,有时要限制输入的内容,比哪,考试分数为0-100,这个时候就使用QIntValidator作为限制范围,而如何输入的是带小数的呢,那么使用QDoubleValidator可以吗,下面请看具体的示例。
//1-100整数
QIntValidator *intValidator = new QIntValidator(1, 100, this);
intValidator->setRange(1, 100);
ui->lineEdit->setValidator(intValidator);
如果是小数呢
// 0.01-100.0 大于0的浮点数
QDoubleValidator *doubleValidator = new QDoubleValidator(this);
doubleValidator->setRange(0.01, 100.0);
ui->lineEdit_2->setValidator(doubleValidator);
发现不实用啊
当然也可以用正则表达式来实现
QRegExp regExp("^(([1-9][0-9]|[1-9])(\\.\\d{1,2})?|0\\.\\d{1,2}|100)$");
QValidator *validator = new QRegExpValidator(regExp, ui->lineEdit_3);
ui->lineEdit_3->setValidator(validator);
这个比较精准
但是仔细一想是Qt的Bug吗,网上查了下也有人遇到说是一个Bug,后来查看帮助说明
一个是标准计数法,一个是科学计数法,默认是科学计数法,所以可以输入任何内容,
如果换成科学计数法呢
QDoubleValidator *doubleValidator2 = new QDoubleValidator(this);
doubleValidator2->setRange(0.01, 100.0);
doubleValidator2->setNotation(QDoubleValidator::StandardNotation);
ui->lineEdit_4->setValidator(doubleValidator2);
运行效果:
完整代码如下:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void initView();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QRegExpValidator>
#include <QIntValidator>
#include <QDoubleValidator>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
initView();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::initView()
{
//1-100整数
QIntValidator *intValidator = new QIntValidator(1, 100, this);
intValidator->setRange(1, 100);
ui->lineEdit->setValidator(intValidator);
// 0.01-100.0 大于0的浮点数
QDoubleValidator *doubleValidator = new QDoubleValidator(this);
doubleValidator->setRange(0.01, 100.0);
ui->lineEdit_2->setValidator(doubleValidator);
QRegExp regExp("^(([1-9][0-9]|[1-9])(\\.\\d{1,2})?|0\\.\\d{1,2}|100)$");
QValidator *validator = new QRegExpValidator(regExp, ui->lineEdit_3);
ui->lineEdit_3->setValidator(validator);
QDoubleValidator *doubleValidator2 = new QDoubleValidator(this);
doubleValidator2->setRange(0.01, 100.0);
doubleValidator2->setNotation(QDoubleValidator::StandardNotation);
ui->lineEdit_4->setValidator(doubleValidator2);
}
运行结果: