、Scintilla是一个免费、跨平台、支持语法高亮的编辑控件。它完整支持源代码的编辑和调试,包括语法高亮、错误指示、代码完成(code completion)和调用提示(calltips)。能包含标记(marker)的页边(margin)可用于标记断点、折叠和高亮当前行。QScintilla是Scintilla在QT上的移植。如果想在Qt上面使用强大的Scintilla控件。本文介绍一下如何用QsciScintilla给代码添加注释
工具/原料
QsciScintilla
QT5.6
方法/步骤
1、//获取必要的参数//空白行的处理boolcommentEmptyLines=true;漆虱忧甘//获取选择注释的开始位置intselectionStart=ui->textEdi墉掠载牿t->SendScintilla(QsciScintillaBase::SCI_GETSELECTIONSTART);//获取选择注释的结束位置intselectionEnd=ui->textEdit->SendScintilla(QsciScintillaBase::SCI_GETSELECTIONEND);//获取选择注释的当前位置intcaretPosition=ui->textEdit->SendScintilla(QsciScintillaBase::SCI_GETCURRENTPOS);
2、//当前的光标位置是否在选择内boolmove_caret=caretPosition<selectionEnd;
3、//获取要注释的行号intselStartLine=ui->textEdit->挢旗扦渌;SendScintil造婷用痃la(QsciScintillaBase::SCI_LINEFROMPOSITION,selectionStart);intselEndLine=ui->textEdit->SendScintilla(QsciScintillaBase::SCI_LINEFROMPOSITION,selectionEnd);//计算注释行数intlines=selEndLine-selStartLine;
4、//处理结束行if((lines>0)&&(selectionEnd==ui->textEdit->SendScintilla(QsciScintillaBase::SCI_POSITIONFROMLINE,selEndLine)))selEndLine--;
5、//记录操作,方便实现redoundo功能ui->textEdit->SendScintilla(QsciScintillaBase::SCI_BEGINUNDOACTION);
6、//注释每一行//遍历行for(inti=selStartLine;i<=衡痕贤伎selEndLine;++i){惺绅寨瞀//获取注释的行信息intlineStart=ui->textEdit->SendScintilla(QsciScintillaBase::SCI_POSITIONFROMLINE,i);intlineIndent=ui->textEdit->SendScintilla(QsciScintillaBase::SCI_GETLINEINDENTPOSITION,i);intlineEnd=ui->textEdit->SendScintilla(QsciScintillaBase::SCI_GETLINEENDPOSITION,i);if(lineIndent==lineEnd&&!commentEmptyLines)continue;//要注释的行前面的空格处理lineIndent=lineStart;intlineBufferSize=lineEnd-lineIndent+1;char*buf=newchar[lineBufferSize];//获取注释范围ui->textEdit->SendScintilla(QsciScintillaBase::SCI_GETTEXTRANGE,lineIndent,lineEnd,buf);//添加注释“//”ui->textEdit->SendScintilla(QsciScintillaBase::SCI_INSERTTEXT,lineIndent,"//");}
7、//完成记录ui->textEdit->SendScintilla(QsciScintillaBase::SCI_ENDUNDOACTION);
8、完整程序