欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

QT QTextEdit 限制最大输入长度

程序员文章站 2022-04-06 08:20:41
...

方式一(当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里输入,“中国你好!”中间添加了一张图片。如下:

QT QTextEdit 限制最大输入长度

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

                                        QT QTextEdit 限制最大输入长度

居然是“中国?你好!”

理所当然,我们再将打印出来这个值“中国?你好!” 使用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));

}