QsciScintilla 如何添加注释
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->SendScintilla(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、完整程序