1、//获取必要的参数// 空白行的处理bool commentEmptyLines = true;//获取选择注释的开始位置int selectionStart = ui->textEdit->SendScintilla(QsciScintillaBase::SCI_GETSELECTIONSTART); //获取选择注释的结束位置int selectionEnd = ui->textEdit->SendScintilla(QsciScintillaBase::SCI_GETSELECTIONEND);//获取选择注释的当前位置int caretPosition = ui->textEdit->SendScintilla(QsciScintillaBase::SCI_GETCURRENTPOS);
2、//当前的光标位置 是否在选择内bool move_caret = caretPosition < selectionEnd;
3、//获取要注释的行号int selStartLine = ui->textEdit->挢旗扦渌;SendScintil造婷用痃la(QsciScintillaBase::SCI_LINEFROMPOSITION,selectionStart);int selEndLine = ui->textEdit->SendScintilla(QsciScintillaBase::SCI_LINEFROMPOSITION,selectionEnd);//计算 注释行数int lines = selEndLine - selStartLine;
4、//处理结束行if((lines > 0)&& (selectionEnd == ui->textEdit->SendScintilla(QsciScintillaBase::SCI_POSITIONFROMLINE,selEndLine))) selEndLine-- ;
5、//记录操作,方便实现 redo undo功能ui->textEdit->SendScintilla(QsciScintillaBase::SCI_BEGINUNDOACTION);
6、// 注释每一行//遍历行 for(int i = selStartLine; i <= 衡痕贤伎selEndLine ; ++i) { //获取注释的行信息int lineStart = ui->textEdit->SendScintilla(QsciScintillaBase::SCI_POSITIONFROMLINE,i); int lineIndent = ui->textEdit->SendScintilla(QsciScintillaBase::SCI_GETLINEINDENTPOSITION,i); int lineEnd = ui->textEdit->SendScintilla(QsciScintillaBase::SCI_GETLINEENDPOSITION,i); if(lineIndent == lineEnd && !commentEmptyLines) continue; // 要注释的行前面的空格处理 lineIndent = lineStart; int lineBufferSize = lineEnd - lineIndent +1; char *buf =new char[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、完整程序