欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Qt實(shí)現(xiàn)QLineEdit輸入前提示輸入范圍并用正則表達(dá)式限制輸入范圍

 更新時(shí)間:2024年05月15日 09:03:24   作者:眸中yue  
在日常開發(fā)過程中QLineEdit作為輸入框,有時(shí)要限制輸入的內(nèi)容,這篇文章主要給大家介紹了關(guān)于Qt實(shí)現(xiàn)QLineEdit輸入前提示輸入范圍并用正則表達(dá)式限制輸入范圍的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

簡介

總結(jié)項(xiàng)目中遇到的一些問題,重寫QLineEdit 實(shí)現(xiàn)這一功能。

1. 想在QSpinBox中設(shè)置一個(gè)輸入前的提示框,但是其沒有setPlaceHolderText方法,用setToolTip設(shè)置懸浮提示框只能放在控件上才能顯示。

2. 用QLineEdit可以用setPlaceHolderText來設(shè)置輸入前的提示框,又沒有可以設(shè)置大小范圍的方法。于是想到可以利用正則表達(dá)式來實(shí)現(xiàn)。

一、運(yùn)行效果

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

只有鼠標(biāo)移動到控件位置才行,不是想要的效果。

二、提出問題

  • QLineEdit可以輸入任意字符,包括數(shù)字和文字,所以要實(shí)現(xiàn)只輸入某一范圍的數(shù)值,一開始想到用Qt內(nèi)置的QDoubleValidator來實(shí)現(xiàn)輸入0.0-100.0的浮點(diǎn)型數(shù)值,不知道是不是Qt的Bug,這個(gè)設(shè)置實(shí)現(xiàn)不了輸入的限制。
    //設(shè)置輸入范圍,實(shí)現(xiàn)輸入框只能輸入0.0-100.0且小數(shù)點(diǎn)后兩位
    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設(shè)置成0-100,在輸入小于100的數(shù)值后,再輸入還是可以輸入。

解決方法

  • 既然輸入的值可以顯示超出設(shè)置的范圍,想到可以重寫一個(gè)QLineEdit,設(shè)置一個(gè)最大最小值,然后每次輸入判斷輸入的值是否在這個(gè)范圍內(nèi),不在則清空輸入框。

MyLineEdit.h

#include <QWidget>
#include <QLineEdit>

class MyLineEdit : public QLineEdit
{
    Q_OBJECT
public:
    explicit MyLineEdit(QWidget *parent = nullptr);
public:
    //設(shè)置最大最小輸入范圍
    void setMaxValue(double max);
    void setMinValue(double min);
signals:

public slots:
    //當(dāng)輸入的值不在范圍內(nèi),光標(biāo)離開編輯框時(shí)清空
    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);

    //設(shè)置lineedit的提示
    m_myLineEdit->setPlaceholderText("請輸入0.0-100.0的數(shù)");
    //設(shè)置最大最小值
    m_myLineEdit->setMaxValue(100.0);
    m_myLineEdit->setMinValue(0.0);
    //設(shè)置輸入范圍
    QDoubleValidator *validator = new QDoubleValidator(0.0, 100.0, 2);
    m_myLineEdit->setValidator(validator);
}

這樣就可以通過設(shè)置一個(gè)最大最小值范圍,超過范圍清空輸入框的方式實(shí)現(xiàn)想要的效果。

  • 還有一種方法是通過寫一個(gè)正則表達(dá)式來限制輸入的值的范圍,正則表達(dá)式的使用可以參考站內(nèi)文章。
   //設(shè)置lineedit的提示
   m_myLineEdit->setPlaceholderText("請輸入0-100的數(shù)");
   //設(shè)置最大最小值
   //m_myLineEdit->setMaxValue(100);
   //m_myLineEdit->setMinValue(0);
   //設(shè)置輸入范圍
   QRegExpValidator *validator = new QRegExpValidator(QRegExp("\\d{2}|100"), this);
   m_myLineEdit->setValidator(validator);

一個(gè)完整的正則表達(dá)式是可以實(shí)現(xiàn)想要的效果的。

結(jié)束語

到此這篇關(guān)于Qt實(shí)現(xiàn)QLineEdit輸入前提示輸入范圍并用正則表達(dá)式限制輸入范圍的文章就介紹到這了,更多相關(guān)Qt QLineEdit輸入正則限制輸入范圍內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++11?condition_variable條件變量的用法說明

    C++11?condition_variable條件變量的用法說明

    這篇文章主要介紹了C++11?condition_variable條件變量的用法說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C++面試八股文之static_cast你了解嗎

    C++面試八股文之static_cast你了解嗎

    C++11引入四種新的類型轉(zhuǎn)換,分別是static_cast、dynamic_cast、const_cast、和reinterpret_cast,下面就來和大家講講static_cast中面試常考的知識點(diǎn)吧
    2023-06-06
  • C++實(shí)踐數(shù)組作數(shù)據(jù)成員的參考

    C++實(shí)踐數(shù)組作數(shù)據(jù)成員的參考

    今天小編就為大家分享一篇關(guān)于C++實(shí)踐數(shù)組作數(shù)據(jù)成員的參考,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • C語言 指針與二維數(shù)組詳解

    C語言 指針與二維數(shù)組詳解

    本文主要介紹C語言 指針與二維數(shù)組,這里整理了詳細(xì)的資料及示例代碼,有需要的小伙伴可以參考下
    2016-08-08
  • C++?正則表達(dá)式的應(yīng)用詳解

    C++?正則表達(dá)式的應(yīng)用詳解

    正則表達(dá)式(regular?expression)描述了一種字符串匹配的模式(pattern),可以用來檢查一個(gè)串是否含有某種子串、將匹配的子串替換或者從某個(gè)串中取出符合某個(gè)條件的子串等
    2021-11-11
  • C++移動語義介紹與使用講解

    C++移動語義介紹與使用講解

    首先,移動語義和完美轉(zhuǎn)發(fā)這兩個(gè)概念是在C++的模板編程的基礎(chǔ)上,新增的特性,主要是配合模板來使用。本篇會從C++的值類型,到移動拷貝與移動賦值來理解移動語義與完美轉(zhuǎn)發(fā)
    2022-09-09
  • 一文帶你了解Qt中槽的使用

    一文帶你了解Qt中槽的使用

    這篇文章主要為大家詳細(xì)介紹了Qt中槽的使用教程,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Qt有一定的幫助,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-12-12
  • 12個(gè)關(guān)于C語言的有趣問答

    12個(gè)關(guān)于C語言的有趣問答

    這篇文章主要介紹了12個(gè)關(guān)于C語言的有趣問答,有助于讀者加深對C語言程序設(shè)計(jì)的理解,需要的朋友可以參考下
    2014-07-07
  • 一個(gè)win32窗口創(chuàng)建示例

    一個(gè)win32窗口創(chuàng)建示例

    這篇文章主要介紹了一個(gè)win32窗口創(chuàng)建示例,需要的朋友可以參考下
    2014-04-04
  • C語言編程gcc如何生成靜態(tài)庫.a和動態(tài)庫.so示例詳解

    C語言編程gcc如何生成靜態(tài)庫.a和動態(tài)庫.so示例詳解

    本文主要敘述了gcc如何生成靜態(tài)庫(.a)和動態(tài)庫(.so),幫助我們更好的進(jìn)行嵌入式編程。因?yàn)橛行r(shí)候,涉及安全,所以可能會提供靜態(tài)庫或動態(tài)庫供我們使用
    2021-10-10

最新評論