11 代碼高亮——普通文本

(非常抱歉教程沒有錯,是我自己敲代碼敲錯了QAQ,但我懶的刪就把這筆記留下來了)
我在寫左邊顯示行數(shù)的時候,發(fā)現(xiàn)一個bug
我發(fā)現(xiàn)如果我一直向文本框輸入文本,左邊的行數(shù)顯示正常,但如果我將文本全部刪除后再次輸入時,就會導致行數(shù)顯示錯誤

??1.第一處修改的位置
//視頻中的代碼:
??// int lineCountOfTextBrowser = text.trimmed().split("\n").length();
??//使用的是text.trimmed().split("\n").length(),這會將所有空行(例如剛剛刪除的文本所在的行)都計算在內(nèi),導致行數(shù)計算不正確。
??//修改后的代碼:
??int lineCountOfTextBrowser = text.split("\n").length() - 1;
??//使用 text.split("\n").length() - 1 來計算非空行數(shù)。這樣就可以避免空行的干擾,正確計算行數(shù)了。
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(),這會將所有空行(例如剛剛刪除的文本所在的行)都計算在內(nèi),導致行數(shù)計算不正確。 //修改后的代碼: int lineCountOfTextBrowser = text.split("\n").length() - 1; //使用 text.split("\n").length() - 1 來計算非空行數(shù)。這樣就可以避免空行的干擾,正確計算行數(shù)了。 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); }
標簽: