欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Qt中QTextEdit限制只能輸入數(shù)字英文逗號

 更新時間:2023年06月29日 10:38:39   作者:AlwaysWin丶  
這篇文章主要給大家介紹了關(guān)于Qt中QTextEdit限制只能輸入數(shù)字英文逗號的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

前言

在開發(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)文章

最新評論