Qt中QTextEdit限制只能輸入數(shù)字英文逗號(hào)
前言
在開發(fā)中,經(jīng)常會(huì)碰到需要限制用戶的輸入,如只能輸入數(shù)字 英文等。關(guān)于用戶的文本輸入一般使用QLineEdit QTextiEdit,對(duì)這兩個(gè)控件的限制需要使用不同的方法。
QLineEdit的限制
眾所周知,Qt中有setValidator方法可以限制QLineEdit的輸入內(nèi)容,包括已實(shí)現(xiàn)好的如QIntValidator、QDoubleValidator等,也可以使用正則表達(dá)式來限制輸入,如下所示:
m_pLineEdit = new QLineEdit(this); //設(shè)置只能輸入數(shù)字 m_pLineEdit->setValidator(new QIntValidator(1, 65535)); //設(shè)置只能輸入英文大小寫字母和英文逗號(hào) QRegExp regexp; regexp.setPattern("^[a-zA-Z0-9,]+$"); m_pLineEdit->setValidator(new QRegExpValidator(regexp));
QTextEdit的限制
而QTextEdit不能與QLineEdit一樣通過現(xiàn)有的方法來設(shè)置,只能另辟蹊徑,因?yàn)镼TextEdit在文本改變時(shí)會(huì)觸發(fā)QTextEdit::textChanged 信號(hào),所以可以獲取實(shí)時(shí)改變的文本來限制輸入,如下所示:
//連接信號(hào)槽 connect(ui.textEdit, &QTextEdit::textChanged, this, &Widget::textEditChanged); //槽函數(shù)實(shí)現(xiàn) void Widget::textEditChanged() { //只能輸入數(shù)字 字母 英文逗號(hào) QRegExp reg; reg.setPattern("^[a-zA-Z0-9,]+$"); QString strText = ui.textEdit->toPlainText(); if (reg.exactMatch(strText)) { m_symtext = strText; } else { ui.textEdit->setText(m_symtext); } }
private: QString m_symtext;
此時(shí)能發(fā)現(xiàn)已經(jīng)不能輸入不合法的內(nèi)容了,還有一個(gè)小缺陷,輸入限制內(nèi)容時(shí),光標(biāo)會(huì)跳到最前面,這個(gè)也可以進(jìn)行限制,完整內(nèi)容:
void Widget::textEditChanged() { //只能輸入數(shù)字 字母 英文逗號(hào) QRegExp reg; reg.setPattern("^[a-zA-Z0-9,]+$"); QString strText = ui.textEdit->toPlainText(); if (reg.exactMatch(strText)) { m_symtext = strText; } else { int offset = strText.length() - m_symtext.length(); //改變光標(biāo)的位置 QTextCursor cursor = ui.textEdit->textCursor(); auto pos = cursor.position(); pos = pos >= offset ? pos - offset : pos; ui.textEdit->setText(m_symtext); cursor.setPosition(pos); ui.textEdit->setTextCursor(cursor); } }
補(bǔ)充:QTextEdit限制文本長度
QString textContent = this->toPlainText(); int length = textContent.count(); int maxLength = maxLen; // 最大字符數(shù) if(length > maxLength) { int position = this->textCursor().position(); QTextCursor textCursor = this->textCursor(); textContent.remove(position - (length - maxLength), length - maxLength); this->setText(textContent); textCursor.setPosition(position - (length - maxLength)); this->setTextCursor(textCursor); }
總結(jié)
到此這篇關(guān)于Qt中QTextEdit限制只能輸入數(shù)字英文逗號(hào)的文章就介紹到這了,更多相關(guān)QTextEdit限制輸入數(shù)字英文逗號(hào)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實(shí)現(xiàn)職工信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了c++實(shí)現(xiàn)職工信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01帶頭結(jié)點(diǎn)單鏈表與不帶頭結(jié)點(diǎn)單鏈表的區(qū)別
這篇文章主要介紹了帶頭結(jié)點(diǎn)單鏈表與不帶頭結(jié)點(diǎn)單鏈表的區(qū)別,需要的朋友可以參考下2023-07-07Qt實(shí)現(xiàn)可以計(jì)算大數(shù)的簡單計(jì)算器
計(jì)算器是我們生活中很常見的東西,它可以由多種語言多種方式來實(shí)現(xiàn)。本文主要介紹的是基于C++語言,由QT實(shí)現(xiàn)的可以計(jì)算大數(shù)的簡單計(jì)算器,需要的可以參考一下2022-12-12C++中獲取字符串長度的函數(shù)sizeof()、strlen()、length()、size()詳解和區(qū)別(推薦)
在C++中計(jì)算長度的函數(shù)有四種,它們分別是sizeof()?,size(),strlen(),str.length(),這篇文章主要介紹了C++中獲取字符串長度的函數(shù)sizeof()、strlen()、length()、size()詳解和區(qū)別,需要的朋友可以參考下2023-02-02解析bitmap處理海量數(shù)據(jù)及其實(shí)現(xiàn)方法分析
本篇文章是對(duì)bitmap處理海量數(shù)據(jù)及其實(shí)現(xiàn)的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C++實(shí)現(xiàn)的分布式游戲服務(wù)端引擎KBEngine詳解
這篇文章主要詳細(xì)介紹了C++實(shí)現(xiàn)的分布式游戲服務(wù)端引擎KBEngine的概念以及使用方法,非常的實(shí)用,有需要的小伙伴可以參考下2015-03-03