C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > Qt QLineEdit输入正则限制范围

Qt实现QLineEdit输入前提示输入范围并用正则表达式限制输入范围

作者:眸中yue

在日常开发过程中QLineEdit作为输入框,有时要限制输入的内容,这篇文章主要给大家介绍了关于Qt实现QLineEdit输入前提示输入范围并用正则表达式限制输入范围的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

简介

总结项目中遇到的一些问题,重写QLineEdit 实现这一功能。

1. 想在QSpinBox中设置一个输入前的提示框,但是其没有setPlaceHolderText方法,用setToolTip设置悬浮提示框只能放在控件上才能显示。

2. 用QLineEdit可以用setPlaceHolderText来设置输入前的提示框,又没有可以设置大小范围的方法。于是想到可以利用正则表达式来实现。

一、运行效果

如果是使用QDoubleSpinBox只能有的效果图:

只有鼠标移动到控件位置才行,不是想要的效果。

二、提出问题

    //设置输入范围,实现输入框只能输入0.0-100.0且小数点后两位
    QDoubleValidator *validator = new QDoubleValidator(0.0, 100.0, 2);
    m_myLineEdit->setValidator(validator);

效果图可知输入100之后再输入也是可以的,可自行尝试。

    QIntValidator *validator = new QIntValidator(0, 100);
    m_myLineEdit->setValidator(validator);

QIntValidator设置成0-100,在输入小于100的数值后,再输入还是可以输入。

解决方法

MyLineEdit.h

#include <QWidget>
#include <QLineEdit>

class MyLineEdit : public QLineEdit
{
    Q_OBJECT
public:
    explicit MyLineEdit(QWidget *parent = nullptr);
public:
    //设置最大最小输入范围
    void setMaxValue(double max);
    void setMinValue(double min);
signals:

public slots:
    //当输入的值不在范围内,光标离开编辑框时清空
    void slotClearEdit(QString text);
private:
    double m_max;
    double m_min;
};

MyLineEdit.cpp

#include "MyLineEdit.h"

MyLineEdit::MyLineEdit(QWidget *parent) : QLineEdit(parent)
{
    connect(this, SIGNAL(textChanged(QString)), this, SLOT(slotClearEdit(QString)));
}

void MyLineEdit::setMaxValue(double max)
{
    m_max = max;
}

void MyLineEdit::setMinValue(double min)
{
    m_min = min;
}

void MyLineEdit::slotClearEdit(QString text)
{
    if(text.toDouble() < m_min || text.toDouble() > m_max)
    {
        this->clear();
    }
}

MainWindow.cpp

#include "MainWindow.h"
#include "ui_MainWindow.h"
#include "MyLineEdit.h"
#include <QGridLayout>
#include <QDoubleSpinBox>
#include <QIntValidator>
#include <QDoubleValidator>
#include <QRegExpValidator>

MainWindow::MainWindow(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MainWindow),
    m_myLineEdit(nullptr),
    m_lab(nullptr)
{
    ui->setupUi(this);
    initUI();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::initUI()
{
    QGridLayout* layout = new QGridLayout(this);
    m_myLineEdit = new MyLineEdit();
    m_lab = new QLabel("输入:");
    layout->addWidget(m_lab, 0, 0);
    layout->setColumnStretch(0,1);
    layout->addWidget(m_myLineEdit, 0, 1);
    layout->setColumnStretch(1,4);

    //设置lineedit的提示
    m_myLineEdit->setPlaceholderText("请输入0.0-100.0的数");
    //设置最大最小值
    m_myLineEdit->setMaxValue(100.0);
    m_myLineEdit->setMinValue(0.0);
    //设置输入范围
    QDoubleValidator *validator = new QDoubleValidator(0.0, 100.0, 2);
    m_myLineEdit->setValidator(validator);
}

这样就可以通过设置一个最大最小值范围,超过范围清空输入框的方式实现想要的效果。

   //设置lineedit的提示
   m_myLineEdit->setPlaceholderText("请输入0-100的数");
   //设置最大最小值
   //m_myLineEdit->setMaxValue(100);
   //m_myLineEdit->setMinValue(0);
   //设置输入范围
   QRegExpValidator *validator = new QRegExpValidator(QRegExp("\\d{2}|100"), this);
   m_myLineEdit->setValidator(validator);

一个完整的正则表达式是可以实现想要的效果的。

结束语

到此这篇关于Qt实现QLineEdit输入前提示输入范围并用正则表达式限制输入范围的文章就介绍到这了,更多相关Qt QLineEdit输入正则限制输入范围内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文