最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

簡(jiǎn)介

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

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

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

一、運(yùn)行效果

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

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

二、提出問(wèn)題

  • QLineEdit可以輸入任意字符,包括數(shù)字和文字,所以要實(shí)現(xiàn)只輸入某一范圍的數(shù)值,一開始想到用Qt內(nèi)置的QDoubleValidator來(lái)實(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("請(qǐng)輸入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);
}

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

  • 還有一種方法是通過(guò)寫一個(gè)正則表達(dá)式來(lái)限制輸入的值的范圍,正則表達(dá)式的使用可以參考站內(nèi)文章。
   //設(shè)置lineedit的提示
   m_myLineEdit->setPlaceholderText("請(qǐng)輸入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é)束語(yǔ)

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

相關(guān)文章

  • 關(guān)于c++11與c風(fēng)格路徑拼接的速度對(duì)比

    關(guān)于c++11與c風(fēng)格路徑拼接的速度對(duì)比

    這篇文章主要介紹了關(guān)于c++11與c風(fēng)格路徑拼接的速度對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C語(yǔ)言使用strcmp()函數(shù)比較兩個(gè)字符串的實(shí)現(xiàn)

    C語(yǔ)言使用strcmp()函數(shù)比較兩個(gè)字符串的實(shí)現(xiàn)

    這篇文章主要介紹了C語(yǔ)言使用strcmp()函數(shù)比較兩個(gè)字符串的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Matlab利用遺傳算法GA求解非連續(xù)函數(shù)問(wèn)題詳解

    Matlab利用遺傳算法GA求解非連續(xù)函數(shù)問(wèn)題詳解

    遺傳算法起源于對(duì)生物系統(tǒng)所進(jìn)行的計(jì)算機(jī)模擬研究。其本質(zhì)是一種高效、并行、全局搜索的方法,能在搜索過(guò)程中自動(dòng)獲取和積累有關(guān)搜索空間的知識(shí),并自適應(yīng)地控制搜索過(guò)程以求得最佳解。本文將利用其求解非連續(xù)函數(shù)問(wèn)題,需要的可以參考一下
    2022-09-09
  • C語(yǔ)言中單目操作符++、–的實(shí)例講解

    C語(yǔ)言中單目操作符++、–的實(shí)例講解

    C語(yǔ)言的操作符共分為算術(shù)操作符,移位操作符,位操作符,賦值操作符,單目操作符,關(guān)系操作符,邏輯操作符,條件操作符,逗號(hào)表達(dá)式,下表引用、函數(shù)調(diào)用和結(jié)構(gòu)成員這10大類,這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中單目操作符++、–的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • C++?電話號(hào)碼的字母組合功能實(shí)現(xiàn)

    C++?電話號(hào)碼的字母組合功能實(shí)現(xiàn)

    這篇文章主要介紹了C++?電話號(hào)碼的字母組合,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • 在Qt中使用QtWebApp搭建HTTP服務(wù)器的詳細(xì)步驟

    在Qt中使用QtWebApp搭建HTTP服務(wù)器的詳細(xì)步驟

    QtWebApp是一個(gè)開源項(xiàng)目,它基于著名的Qt?Framework開發(fā),提供了一種在C++環(huán)境中構(gòu)建HTTP服務(wù)器的解決方案,這篇文章主要給大家介紹了關(guān)于在Qt中使用QtWebApp搭建HTTP服務(wù)器的詳細(xì)步驟,需要的朋友可以參考下
    2024-07-07
  • C++特性:迭代器

    C++特性:迭代器

    這篇文章主要介紹了C++特性:迭代器,本文主要通過(guò)介紹迭代器,迭代器和指針的區(qū)別,容器迭代器的使用等方面,需要的朋友可以參考下
    2021-06-06
  • C語(yǔ)言有符號(hào)和無(wú)符號(hào)在內(nèi)存中的存儲(chǔ)方式區(qū)別小結(jié)

    C語(yǔ)言有符號(hào)和無(wú)符號(hào)在內(nèi)存中的存儲(chǔ)方式區(qū)別小結(jié)

    有符號(hào)和無(wú)符號(hào)類型在內(nèi)存中的二進(jìn)制存儲(chǔ)內(nèi)容完全相同,區(qū)別僅在于編譯器對(duì)二進(jìn)制位的解釋規(guī)則?,下面就來(lái)詳細(xì)的介紹一下,感興趣的可以了解一下
    2025-12-12
  • c++如何控制輸出浮點(diǎn)數(shù)小數(shù)點(diǎn)后若干位

    c++如何控制輸出浮點(diǎn)數(shù)小數(shù)點(diǎn)后若干位

    這篇文章主要介紹了c++如何控制輸出浮點(diǎn)數(shù)小數(shù)點(diǎn)后若干位問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • C++修煉之拷貝構(gòu)造函數(shù)

    C++修煉之拷貝構(gòu)造函數(shù)

    這篇文章主要內(nèi)容是6個(gè)默認(rèn)成員函數(shù)之一的拷貝構(gòu)造函數(shù)的認(rèn)識(shí)與學(xué)習(xí),讓同學(xué)們充分理解淺拷貝與深拷貝,感興趣的小伙伴可以參考閱讀
    2023-04-04

最新評(píng)論

金华市| 静安区| 伊川县| 泉州市| 黄陵县| 抚州市| 桐柏县| 尉犁县| 高碑店市| 靖远县| 青阳县| 正阳县| 崇阳县| 班戈县| 黔江区| 团风县| 安陆市| 丽水市| 东宁县| 房产| 陕西省| 綦江县| 伊春市| 连南| 中宁县| 黄龙县| 舞钢市| 崇礼县| 蓝田县| 讷河市| 永福县| 航空| 枣庄市| 渭南市| 蒙城县| 怀柔区| 阿坝| 岚皋县| 额济纳旗| 乡城县| 高邑县|