Qt 實現文字輸入框,帶字數限制
核心構思
核心的點在於,限制輸入的字數;主要的方法為建立一個組合視窗
-
textChanged
這個訊號,會在你輸入字元之後發射,可以連線這個訊號,在發射了訊號之後,去獲取當前QTextEdit
裡的內容,獲取數量,然後根據最大數量,來選擇是不是需要擷取文字; -
游標的移動的問題。在進行插入時,游標要時刻保持在當前位置。
-
文字內容的行高。這裡請看Qt設定QTextEdit的行高_師從名劍山的部落格-CSDN部落格_qt qtextedit 高度
程式碼實現
// 首先連線訊號
connect(ui->textEdit, &QTextEdit::textChanged,
this, &LimitTextEdit::slot_handleInput);
void LimitTextEdit::slot_handleInput()
{
auto textEdit = static_cast<QTextEdit*>(sender());
int currentNum = textEdit->toPlainText().length();
// 判斷是不是超出了字數限制
if (currentNum > m_maxWordNum) {
QString text = textEdit->toPlainText();
text = text.mid(0, m_maxWordNum);
int position = textEdit->textCursor().position();
textEdit->setText(text);
// 獲取游標位置
QTextCursor cursor = textEdit->textCursor();
if (position > m_maxWordNum) {
// 如果當前輸入位置為末尾的話,就直接跳到最後一個字元。
position = m_maxWordNum;
}
cursor.setPosition(position);
textEdit->setTextCursor(cursor);
currentNum = m_maxWordNum;
}
ui->labelCurrentNum->setNum(currentNum);
}
程式碼下載請看此處LimitTextEdit