11 代码高亮——普通文本

(非常抱歉教程没有错,是我自己敲代码敲错了QAQ,但我懒的删就把这笔记留下来了)
我在写左边显示行数的时候,发现一个bug
我发现如果我一直向文本框输入文本,左边的行数显示正常,但如果我将文本全部删除后再次输入时,就会导致行数显示错误

1.第一处修改的位置
//视频中的代码:
// int lineCountOfTextBrowser = text.trimmed().split("\n").length();
//使用的是text.trimmed().split("\n").length(),这会将所有空行(例如刚刚删除的文本所在的行)都计算在内,导致行数计算不正确。
//修改后的代码:
int lineCountOfTextBrowser = text.split("\n").length() - 1;
//使用 text.split("\n").length() - 1 来计算非空行数。这样就可以避免空行的干扰,正确计算行数了。
2.第二处修改的位置
//视频中的代码:
//text.chop((QString::number(i+1)+"\n").length());
//由于上方的代码去除了空行的影响,这里的序号也要-1
//修改后的代码:
text.chop((QString::number(i)+"\n").length());
//就可以修复漏洞改后的代码:
修改完毕后的代码:
void MyTextEdit::onTextChanged() { int lineCountOfTextEdit = ui->textEdit->document()->lineCount(); QString text = ui->textBrowser->toPlainText(); //视频中的代码: // int lineCountOfTextBrowser = text.trimmed().split("\n").length(); //使用的是text.trimmed().split("\n").length(),这会将所有空行(例如刚刚删除的文本所在的行)都计算在内,导致行数计算不正确。 //修改后的代码: int lineCountOfTextBrowser = text.split("\n").length() - 1; //使用 text.split("\n").length() - 1 来计算非空行数。这样就可以避免空行的干扰,正确计算行数了。 if(lineCountOfTextBrowser>lineCountOfTextEdit){ for(int i =lineCountOfTextBrowser;i>lineCountOfTextEdit;i--) { //视频中的代码: //text.chop((QString::number(i+1)+"\n").length()); //由于上方的代码去除了空行的影响,这里的序号也要-1 //修改后的代码: text.chop((QString::number(i)+"\n").length()); //就可以修复漏洞 } } else if(lineCountOfTextBrowser==1&&text.length()<1){ text+="1\n"; } else if(lineCountOfTextBrowser<lineCountOfTextEdit){ for(int i =lineCountOfTextBrowser;i<lineCountOfTextEdit;i++) { text += QString::number(i+1)+"\n"; } } ui->textBrowser->setMaximumWidth(25+QString::number(lineCountOfTextEdit).length()*9); ui->textBrowser->setText(text); }