0
点赞
收藏
分享

微信扫一扫

QScintilla学习和使用杂记


快速入门,可以先参考我这篇博客 ​​QScintilla学习大全_标biao的博客​​


QsciScintilla.h这个是对qsciscintillabase.h的再次封装,使得通过各种函数形式实现功能(这些都是最为常用的函数,所以使得scitinalL更易用了的原因),而不是通过发送信号的方式。


  • virtual void QsciScintilla::setMarginMarkerMask(int margin, int mask); 设置符号的掩码,参数​​mask​​是通过二进制掩码的形式来指定该边界栏显示哪个符号(1表示显示),不显示哪个符号(0表示不显示)。标记掩码最多可以有32个。这是因为它实际上是⼀个32位宽的二进制数。因此,这也是编辑器中可定义的最大符号种数,但是符号数是可以无限个的
  • markersAtLine(line);可以得到此行,对于每种符号是否在这儿存在,比如为0b0010,说明第2种符号在这里已经存在了一个
  • 编辑器QSci自己是不能插入图片的,但是有人改造了它,就可以了。具体我还没研究过,估计也能插入背景图片,那这样就太炫酷了,参考这个链接​​QScintilla​​
  • ctags.exe可以解析一个c语言源码工程(我怀疑sourceInsight,vscode这些代码阅读软件就是这样搞的),生成这些符号之间的跳转关系,确实太棒了,命令行为  ./ctags.exe -R --output-format=json > tag.tg
  • QScintilla学习和使用杂记_自定义

  • 然后我们读取上述json文件即可得到符号的跳转了
  • 为什么有些对象我们只需要实例化一次呢?因为这个类的构造函数中会创建一个数据库或者其它操作(这些操作只允许被操作一次),所以如果这个类多次实例化,就会造成多个数据库文件的创建,所以这些类会写一个单实例函数的。
  • 自己定义词法分析器(QSci中用来着色),需要继承自QsciLexerCustom类,必须实现3个虚函数,构造函数+language()+description()+styleText(int start, int end)函数。而styleText会由于单词的顺序处理,而被不断调用,所以我们就是需要在这个函数中进行颜色样式的设置,从而实现所有单词着色。其中这个函数中,我们可以通过正则表达式拆分出关键字,注释等,分别进行样式设置。说实话,这样子还是不好搞啊。这里面的颜色样式需要我们预先自定义的,用ID进行操作。
  • hotspot 是一个可以点击的文本片段,也就是个字符串。如果我们自定义的词法分析器,里面定义了一些样式,这些样式应用在了一些标识符(字符串)上,然后我们把这个样式设置为热点样式,那么这些标识符就可以点击了,也就是成为了hostpost。但是问题就在于,如果我们没有自定义词法分析器,那么也就没有自定义的样式,那么这些样式也就没有在实际标识符中得到应用,那么就没法把这些样式设置为热点样式,那么也就产生不了点击效果。。。
    而且另外一个问题,就算我们重新实现了词法分析器,设置为这一个样式的字符串为热点样式,那么这个样式的字符串们都会变成了热点,都能点击,很明显,这也是不合理的。
  • indicator 和hostpot类似,也是可以点击的作用,但是没有上述说的缺点,可以单独设置,而且不属于词法分析器的一部分,因此都是推荐用这个。也有样式这么一个东西。而且,还能为每个指示字符串设置一个value(尽管它们使用的是同一个指示样式),在点击它的时候,可以得到这个value,我们就能做不同的事啦。
  • positionFromLineIndex(line, col)得到这个在整个文本中是第多少个字符了
  • 给自动完成添加api时,我们需要创建QsciAPIs对象,而不是简单的增加关键字呗
  • setAutoCompletionThreshold(nr_of_chars)是设置自动完成,需要的字符数就开始的
  • setAutoCompletionReplaceWord(replace)在选择自动完成时是否覆盖光标右侧的字符(直到到达分隔符)
  • Call tips调用提示是显示函数参数的小窗口,在用户键入函数名称后显示。“调用提示”窗口可帮助您填写正确的函数参数。调用提示从与自动完成引擎相同的 QsciAPI 中得到的

目前来看,要想实现词法分析器的颜色自定义,好像出了自定义一个词法分析器外,别无他法。比如直接设置LexerCpp的关键字颜色???看官网教程,好像没有这样操作的。官网是自己实现一个词法分析器,用于给关键字着色,然后顺便调用外部的语法分析器分析出可点击标识符,然后分配要给指示器给这些标识符,就具有了跳转功能。此法分析器知道该符号在哪个文件,哪一行哪一列,所以,重新启动一个editor打开后光标设置到哪即可。

其实有的,​​QsciScintilla的使用方法总结(一个很好用的文本编辑器库)_冬之晓东的博客​​

这个博客就实现了,其实就是这么一句。而且这个博客里还讲了如何自定义关键字变色


textLexer->setColor(QColor(Qt:: red),QsciLexerCPP::Comment); //设置自带的注释行为红色,注,这里用Comment,而不是CommentLine,否则无效


其中词法分析器就算ctags.exe,分析得到的是一个json文件(而且也不是通过写文件的方式,而是管道的方式,所以属于内存中数据交换,速度才能快),然后解析后放到一个sqlite3数据库里(比我们自己去查找快多了,人家数据库是专门干快速查找这个事的)(而且这个指定为放在内存中,而不是硬盘中,所以速度会非常快,对的,就要这样),为什么呢,因为数据库的查找速度快,比我们自己放在内存中去查找还快。

举报

相关推荐

0 条评论