欢迎光临散文网 会员登陆 & 注册

11 代码高亮——普通文本

2023-04-29 11:57 作者:不可置信Keep  | 我要投稿

(非常抱歉教程没有错,是我自己敲代码敲错了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);
}

11 代码高亮——普通文本的评论 (共 条)

分享到微博请遵守国家法律