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里输入,“中国你好!”中间添加了一张图片。如下:
这时候我们打印一下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));
}