Qt中QTextEdit限制只能輸入數(shù)字英文逗號(hào)
前言
在開發(fā)中,經(jīng)常會(huì)碰到需要限制用戶的輸入,如只能輸入數(shù)字 英文等。關(guān)于用戶的文本輸入一般使用QLineEdit QTextiEdit,對這兩個(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
實(shí)現(xiàn)Dijkstra算法最短路徑問題詳解
這篇文章主要介紹了實(shí)現(xiàn)Dijkstra算法最短路徑問題詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
C++如何實(shí)現(xiàn)簡單的計(jì)時(shí)器詳解
因?yàn)樽罱e著無聊就想著要不用C++寫點(diǎn)什么東西,仔細(xì)想了想其實(shí)自己的C++學(xué)的也不怎么好,寫個(gè)簡單的計(jì)時(shí)器吧!所以下面這篇文章主要介紹了利用C++如何實(shí)現(xiàn)簡單的計(jì)時(shí)器,需要的朋友可以參考借鑒,下面來一起看看吧。2017-01-01
C++詳細(xì)講解模擬實(shí)現(xiàn)位圖和布隆過濾器的方法
位圖(bitset)是一種常用的數(shù)據(jù)結(jié)構(gòu),常用在給一個(gè)很大范圍的數(shù),判斷其中的一個(gè)數(shù)是不是在其中。在索引、數(shù)據(jù)壓縮方面有很大的應(yīng)用。布隆過濾器是由布隆提出的,它實(shí)際上是一個(gè)很長的二進(jìn)制向量和一系列隨機(jī)映射函數(shù)。布隆過濾器可以用于檢索一個(gè)元素是否在一個(gè)集合中2022-06-06
linux c 獲得當(dāng)前進(jìn)程的進(jìn)程名和執(zhí)行路徑(示例)
如何得到當(dāng)前進(jìn)程的進(jìn)程名和執(zhí)行路徑。寫了個(gè)程序分享一下2013-07-07
VC中CWinThread類以及和createthread API的區(qū)別分析
這篇文章主要介紹了VC中CWinThread類以及和createthread API的區(qū)別分析,較為詳細(xì)的講述了CWinThread類的原理,并以實(shí)例形式對AfxBeginThread函數(shù)的內(nèi)部實(shí)現(xiàn)進(jìn)行了解釋說明,需要的朋友可以參考下2014-10-10
String底層函數(shù)的實(shí)現(xiàn)方式詳解
這篇文章主要介紹了String底層函數(shù)的實(shí)現(xiàn)方式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09

