QT QTextEdit 限制最大输入长度

方式一(当QTextEdit只包含文字的时候适用):

连接QTextEidt 的 信号 

void textChanged()

到槽函数

void on_textEdit_textChanged()
void MainWindow::on_textEdit_textChanged()
{
    QString textContent = ui->textEdit->toPlainText();

    int length = textContent.count();

    int maxLength = MAX_SIZE; // 最大字符数

    if(length > maxLength) {
        int position = ui->textEdit->textCursor().position();

        QTextCursor textCursor = ui->textEdit->textCursor();

        textContent.remove(position - (length - maxLength), length - maxLength);

        ui->textEdit->setText(textContent);

        textCursor.setPosition(position - (length - maxLength));

        ui->textEdit->setTextCursor(textCursor);

    }

    length = textContent.count();
    ui->sizeLabel->setText(QString("%1/%2").arg(MAX_SIZE-length).arg(MAX_SIZE));
}

    这个时候,我们发现,如果内容全部为文字的话,上面的做法是没问题的。但是,如果QTextEdit中如果包含资源文件,比如图片的话,就会出现下面的问题,就是当字数大于设置的最大值MAX_SIZE的时候,再输入的话,图片会消失。

这是什么原因呢?我们具体来分析一下,当我们插入一张图片的时候,我们来看一下,textEdit->toPlanText()得到的值是什么?

ui->textEdit->toPlainText()
我们在QTextEdit里输入,“中国你好!”中间添加了一张图片。如下:

这时候我们打印一下ui->textEdit->toPlainText()的值:

                                        

居然是“中国?你好!”

理所当然,我们再将打印出来这个值“中国?你好!” 使用setPlainText()设置后,图片自然不会正常显示。

这也就能解释了,上面的方法中,当大于限制字数的时候,图片就会消失的原因。

那么怎么解决呢? 使用setHtml可以吗?试验了下,也是不行的!


方式二(通用方法):
void MainWindow::on_textEdit_textChanged()
{
    QString textContent = ui->textEdit->toPlainText();
    qDebug() << textContent;

    int length = textContent.count();

    int maxLength = MAX_SIZE; // 最大字符数

    if(length > maxLength) {
        QTextCursor cursor = ui->textEdit->textCursor();
        cursor.movePosition(QTextCursor::End);
        if(cursor.hasSelection()) {
            cursor.clearSelection();
        }
        cursor.deletePreviousChar();
        //设置当前的光标为更改后的光标
        ui->textEdit->setTextCursor(cursor);
    }

    length = ui->textEdit->toPlainText().count();
    ui->sizeLabel->setText(QString("%1/%2").arg(MAX_SIZE-length).arg(MAX_SIZE));

}




猜你喜欢

转载自blog.csdn.net/xiezhongyuan07/article/details/80611363