QLineEdit限制数据类型——只能输入浮点型数
前言
最近做了一個(gè)小的上位機(jī),要通過(guò)串口來(lái)下發(fā)幾個(gè)時(shí)間參數(shù),為了防止誤輸入,產(chǎn)生不必要的麻煩,我把輸入范圍限制在0-680的浮點(diǎn)型數(shù)據(jù),支持小數(shù)點(diǎn)后2位。學(xué)習(xí)了一下QLineEdit類是如何限制輸入類型的。本來(lái)是想寫一個(gè)函數(shù),在下發(fā)參數(shù)時(shí),傳QLineEdit的字符串參數(shù)進(jìn)去,然后判斷是否合法,如果不合法,則不下發(fā)參數(shù),請(qǐng)用戶修改后再確認(rèn)。這么做也實(shí)現(xiàn)了,但是想Qt這么強(qiáng)大,應(yīng)該會(huì)考慮到這一點(diǎn)的,所以找了個(gè)更簡(jiǎn)單,在輸入的時(shí)候就限制數(shù)據(jù)的類型,不合法的根本輸入不進(jìn)去。
關(guān)于QLineEdit類
QlineEdit是一個(gè)單行文本輸入框,支持撤銷、重做、復(fù)制、粘貼、拖放等操作,echomode模式支持,即只寫模式,可以輸入密碼等不可見(jiàn)的文本,官方介紹:QLineEdit Class
可以通過(guò)setValidator函數(shù)來(lái)限制數(shù)據(jù)類型,
setValidator函數(shù)的參數(shù)是QValidator,主要有3種:
- QIntValidator //限制只能輸入整數(shù),限制范圍
- QDoubleValidator //限制只能輸入浮點(diǎn)數(shù),包括范圍,小數(shù)點(diǎn)位數(shù)
- QRegExpValidator //限制規(guī)則按指定的正則表達(dá)式
Amazing!QDoubleValidator不就是我想要的嗎?但是經(jīng)過(guò)實(shí)際測(cè)試發(fā)現(xiàn),其中QDoubleValidator可以限制浮點(diǎn)型數(shù)據(jù)和輸入的小數(shù)位數(shù),但是并不能限制輸入范圍,也就是setRange,setBottom,setTop這些函數(shù)的設(shè)置并沒(méi)有生效,這難道是Qt的一個(gè)Bug?我的Qt版本是5.8.0,Qt Creator版本是4.2.1,而QRegExpValidator的使用就很強(qiáng)大了,需要了解正則表達(dá)式的相關(guān)知識(shí)。下面來(lái)詳細(xì)介紹一下這三種類的使用。
QIntValidator Class
功能
限制QLineEdit只能輸入int類型數(shù)據(jù),即整型數(shù)據(jù),包含正負(fù)整數(shù)和0
相關(guān)函數(shù)
//限制數(shù)據(jù)范圍 QIntValidator(int minimum, int maximum, QObject *parent = Q_NULLPTR) //獲取最小值 int bottom() //設(shè)置最小值 void setBottom(int) //設(shè)置數(shù)據(jù)范圍 void setRange(int bottom, int top) //設(shè)置最大值 void setTop(int) //獲取最大值 int top() const示例:
//整型限制范圍100-999 lineEdit->setValidator(new QIntValidator(100, 999, this)); //或者 QIntValidator* aIntValidator = new QIntValidator; aIntValidator->setRange(100, 999); ui->le_L1->setValidator(aIntValidator);
QDoubleValidator Class
功能
限制QLineEdit只能輸入浮點(diǎn)型數(shù)據(jù),可以指定輸入范圍及小數(shù)點(diǎn)位數(shù)
相關(guān)函數(shù)
//限制數(shù)據(jù)范圍 QDoubleValidator(double bottom, double top, int decimals, QObject *parent = Q_NULLPTR) //設(shè)置小數(shù)點(diǎn)位數(shù) void setDecimals(int) //獲取設(shè)置的小數(shù)點(diǎn)位數(shù) int decimals() //設(shè)置數(shù)字表示方式,標(biāo)準(zhǔn)計(jì)數(shù)法還是科學(xué)計(jì)數(shù)法 void setNotation(Notation) //獲取設(shè)置的計(jì)數(shù)方式 Notation notation() //設(shè)置最小值 void setBottom(double) //獲取設(shè)置的最小值 double bottom() //設(shè)置最大值 void setTop(double) //獲取設(shè)置的最大值 double top() //設(shè)置數(shù)據(jù)范圍,默認(rèn)無(wú)小數(shù)位 void setRange(double minimum, double maximum, int decimals = 0)示例
限制范圍無(wú)效,這可能是Qt的一個(gè)Bug。
QRegExpValidator Class
功能
按照自定義的正則表達(dá)式規(guī)則,限制輸入的范圍。
相關(guān)函數(shù)
- 示例
關(guān)于正則表達(dá)式
正則表達(dá)式,又稱規(guī)則表達(dá)式。(英語(yǔ):Regular Expression,在代碼中常簡(jiǎn)寫為regex、regexp或RE),計(jì)算機(jī)科學(xué)的一個(gè)概念。正則表達(dá)式通常被用來(lái)檢索、替換那些符合某個(gè)模式(規(guī)則)的文本。許多程序設(shè)計(jì)語(yǔ)言都支持利用正則表達(dá)式進(jìn)行字符串操作。例如,在Perl中就內(nèi)建了一個(gè)功能強(qiáng)大的正則表達(dá)式引擎。正則表達(dá)式這個(gè)概念最初是由Unix中的工具軟件(例如sed和grep)普及開的。正則表達(dá)式通??s寫成“regex”,單數(shù)有regexp、regex,復(fù)數(shù)有regexps、regexes、regexen。
關(guān)于正則表達(dá)式的詳細(xì)介紹:正則表達(dá)式30分鐘入門教程
//正則表達(dá)式說(shuō)明: /*^(-?[0]|-?[1-9][0-9]{0,5})(?:\.\d{1,4})?$|(^\t?$) (^-?180$)|(^-?1[0-7]\d$)|(^-?[1-9]\d$)|(^-?[1-9]$)|^0$ ^-?(180|1?[0-7]?\d(\.\d+)?)$ ^-?(180|1?[0-7]?\d(\.\d{1,4})?)$ ^-?(90|[1-8]?\d(\.\d{1,4})?)$式子中開頭的^和結(jié)尾的$限定字符串的開始和結(jié)尾;"-?" 表示一個(gè)或0個(gè)負(fù)號(hào),這里面的問(wèn)號(hào)表示其前面的字符重復(fù)0次或1次;管道符“|”表示平行分組,比如后三個(gè),表示180或其它形式;[1-9] 表示限定數(shù)字范圍為1到9,其余類似,如果是有限幾個(gè)值,還可以用枚舉的方式,比如限定-255到255時(shí),第一個(gè)數(shù)字2的限定,應(yīng)該表達(dá)為[1,2],這表示這個(gè)位置只允許是1或者2;"\d"是一個(gè)轉(zhuǎn)義字符,表示匹配一位數(shù)字;“\.” 表示匹配小數(shù)點(diǎn);"\d+",這里面的+表示其前面的\d重復(fù)一次或多次;"\d{1,4}",里面的{1,4}表示重復(fù)1到4次;*/關(guān)于QDoubleValidator的Bug解決
網(wǎng)上搜索一遍,確實(shí)是Qt的Bug,需要重寫,下面是一個(gè)網(wǎng)友實(shí)現(xiàn)的MyDoubleValidator類。
- 定義MyDoubleValidator類
- 函數(shù)實(shí)現(xiàn)
- 實(shí)際應(yīng)用
自定義函數(shù)的實(shí)現(xiàn)方式
一開始,我并不知道可以通過(guò)setValidator函數(shù)來(lái)實(shí)現(xiàn)數(shù)據(jù)類型限制,我直接實(shí)現(xiàn)了一個(gè)檢測(cè)輸入的QString類型數(shù)據(jù)是否是Float數(shù)據(jù),并沒(méi)有指定小數(shù)后的位數(shù),返回值為1表示是Float類型數(shù)據(jù),否則不是。
- 函數(shù)實(shí)現(xiàn)
- 測(cè)試驗(yàn)證
歷史精選
- Qt實(shí)現(xiàn)軟件自動(dòng)更新的一種簡(jiǎn)單方法
- Qt小項(xiàng)目之串口助手控制LED
- 真正的RISC-V開發(fā)板——VEGA織女星開發(fā)板開箱評(píng)測(cè)
- 手把手教你制作Jlink-OB調(diào)試器(含原理圖、PCB、外殼、固件)
歡迎關(guān)注我的個(gè)人博客:www.wangchaochao.top
或微信掃碼關(guān)注我的公眾號(hào)
轉(zhuǎn)載于:https://www.cnblogs.com/whik/p/11078650.html
總結(jié)
以上是生活随笔為你收集整理的QLineEdit限制数据类型——只能输入浮点型数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java 文件夹不存在的解决方案
- 下一篇: Shiro安全框架-简介