1、背景
最近使用QTextEdit 作为程序运行时的信息输出区,来进行用户的交互,由于设置为不可编辑,在程序长时间运行后,该QTextEdit控件所占内存巨大导致程序奔溃,所以设置上限很好的增加了程序的稳定性!
2、实现方法
使用QTextCursor类 模拟光标操作来删除多余的部分,代码如下,具体解释看注释
QTextDocument *document = ui->textBrowser->document(); // 获取文档对象,想象成打开了一个TXT文件
int rowCount = document->blockCount(); // 获取输出区的行数
int maxRowNumber = 2000;//设定为行,超过则开始删除
if(rowCount > maxRowNumber){
QTextCursor cursor = QTextCursor(document); // 创建光标对象
cursor.movePosition(QTextCursor::Start); //移动到开头,就是TXT文件开头
for (int var = 0; var < rowCount - maxRowNumber; ++var) {
cursor.movePosition(QTextCursor::Down, QTextCursor::KeepAnchor); // 向下移动并选中当前行
}
cursor.removeSelectedText();//删除选择的文本
}
3、注意事项
一、最大值的设置看你自己的实际测试,我这里是2000;
二、选择文本的方式!这里用的cursor.movePosition(QTextCursor::Down, QTextCursor::KeepAnchor),要是使用cursor.select(QTextCursor::LineUnderCursor) 行选择,或者cursor.select(QTextCursor::BlockUnderCursor) 段选择,只能删除第一行,因为他俩都无法选择换行符,所以第一行始终都是空白的!