Qt 實現文字輸入框,帶字數限制

師從名劍山發表於2022-04-08

Qt 實現文字輸入框,帶字數限制

核心構思

核心的點在於,限制輸入的字數;主要的方法為建立一個組合視窗

img

  1. textChanged 這個訊號,會在你輸入字元之後發射,可以連線這個訊號,在發射了訊號之後,去獲取當前QTextEdit裡的內容,獲取數量,然後根據最大數量,來選擇是不是需要擷取文字;

  2. 游標的移動的問題。在進行插入時,游標要時刻保持在當前位置。

  3. 文字內容的行高。這裡請看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

相關文章