Qt中QTextEdit限制只能輸入數(shù)字英文逗號
前言
在開發(fā)中,經(jīng)常會碰到需要限制用戶的輸入,如只能輸入數(shù)字 英文等。關(guān)于用戶的文本輸入一般使用QLineEdit QTextiEdit,對這兩個控件的限制需要使用不同的方法。
QLineEdit的限制
眾所周知,Qt中有setValidator方法可以限制QLineEdit的輸入內(nèi)容,包括已實現(xiàn)好的如QIntValidator、QDoubleValidator等,也可以使用正則表達式來限制輸入,如下所示:
m_pLineEdit = new QLineEdit(this); //設置只能輸入數(shù)字 m_pLineEdit->setValidator(new QIntValidator(1, 65535)); //設置只能輸入英文大小寫字母和英文逗號 QRegExp regexp; regexp.setPattern("^[a-zA-Z0-9,]+$"); m_pLineEdit->setValidator(new QRegExpValidator(regexp));
QTextEdit的限制
而QTextEdit不能與QLineEdit一樣通過現(xiàn)有的方法來設置,只能另辟蹊徑,因為QTextEdit在文本改變時會觸發(fā)QTextEdit::textChanged 信號,所以可以獲取實時改變的文本來限制輸入,如下所示:
//連接信號槽 connect(ui.textEdit, &QTextEdit::textChanged, this, &Widget::textEditChanged); //槽函數(shù)實現(xiàn) void Widget::textEditChanged() { //只能輸入數(shù)字 字母 英文逗號 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;
此時能發(fā)現(xiàn)已經(jīng)不能輸入不合法的內(nèi)容了,還有一個小缺陷,輸入限制內(nèi)容時,光標會跳到最前面,這個也可以進行限制,完整內(nèi)容:
void Widget::textEditChanged() { //只能輸入數(shù)字 字母 英文逗號 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(); //改變光標的位置 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); } }
補充: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ù)字英文逗號的文章就介紹到這了,更多相關(guān)QTextEdit限制輸入數(shù)字英文逗號內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
帶頭結(jié)點單鏈表與不帶頭結(jié)點單鏈表的區(qū)別
這篇文章主要介紹了帶頭結(jié)點單鏈表與不帶頭結(jié)點單鏈表的區(qū)別,需要的朋友可以參考下2023-07-07C++中獲取字符串長度的函數(shù)sizeof()、strlen()、length()、size()詳解和區(qū)別(推薦)
在C++中計算長度的函數(shù)有四種,它們分別是sizeof()?,size(),strlen(),str.length(),這篇文章主要介紹了C++中獲取字符串長度的函數(shù)sizeof()、strlen()、length()、size()詳解和區(qū)別,需要的朋友可以參考下2023-02-02解析bitmap處理海量數(shù)據(jù)及其實現(xiàn)方法分析
本篇文章是對bitmap處理海量數(shù)據(jù)及其實現(xiàn)的方法進行了詳細的分析介紹,需要的朋友參考下2013-05-05C++實現(xiàn)的分布式游戲服務端引擎KBEngine詳解
這篇文章主要詳細介紹了C++實現(xiàn)的分布式游戲服務端引擎KBEngine的概念以及使用方法,非常的實用,有需要的小伙伴可以參考下2015-03-03