Qt优秀开源项目之十三:QScintilla

Posted 草上爬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt优秀开源项目之十三:QScintilla相关的知识,希望对你有一定的参考价值。

Scintilla是一个免费、跨平台、支持语法高亮的编辑控件。它完整支持源代码的编辑和调试,包括语法高亮、错误指示、自动补全(code completion)和函数提示(call tips)。详细的介绍可参考:https://www.scintilla.org/
毫无疑问,Notepad++是最出名的基于Scintilla的开源编辑器,它完全用C++实现


而QScintilla是Scintilla在QT上的移植,使用该库可以更为方便的开发Qt程序 

一.下载

QScintilla的官网:https://qscintilla.com/ 
下载地址:Riverbank Computing | Download
注意:有多个版本,而2.12及其以后的版本,不再支持Qt4和Qt5了,所以源码中没有QT4QT5这个目录了。这里我下载的是2.11.6这个版本。这里我使用的QT版本是 Qt 5.12.2。下载完成后解压,其目录结构如下:

目录名用途
Qt4Qt5编译文件夹,生成对应的DLL文件
designer-Qt4Qt5相关的设计师插件的编译文件夹
example-Qt4Qt5简单的示例文件夹
doc使用Doxygen生成的帮助文档
lexers已实现的各语法分析器
......

本文只演示如何编译生成dll,关于Qt Designer插件的编译,详见:QScintilla的安装及简介

二.编译和测试

打开Qt4Qt5文件夹中的qscintilla.pro文件直接编译即可,没任何报错,这里以debug版本为例,编译完成后,会在debug目录中生成qscintilla2_qt5d.lib和qscintilla2_qt5d.dll文件
测试可以直接使用example-Qt4Qt5文件夹中的application工程,但是得对application.pro文件稍作修改,改后的文件如下所示:

QT += core gui widgets

CONFIG      += qscintilla2

HEADERS      = mainwindow.h
SOURCES      = main.cpp mainwindow.cpp
RESOURCES    = application.qrc

INCLUDEPATH += ../Qt4Qt5

LIBS += qscintilla2_qt5d.lib

因为application工程中用到了Qt4Qt5/Qsci中的头文件,因此需要将Qt4Qt5目录包含到INCLUDEPATH中
然后将之前编译好的qscintilla2_qt5d.lib拷贝到example-Qt4Qt5中
这样就能正常编译application工程了,要运行的话,还得将qscintilla2_qt5d.dll拷贝到application.exe所在目录中
运行时,如下所示:

三.类的层次结构

 图片来自:https://qscintilla.com/#editor
1.最基本的类就是QSciScintillaBase,它是⽂本编辑器的基类,该类偏底层,通常不直接使用。QScintilla库提供了⼀个上层⼦类QSciScintlla ,它就是⽂本编辑器类,其内有许多类似于Qt的API 。如果该类缺少所需的某些⾮常具体的功能,此时可以继承其⽗类QSciScintillaBase。
2.语法高亮显示的对象称之为词法分析器。创建并配置这样的词法分析器对象后,只需要将其应用到⽂本编辑器(QSciScintilla对象)中即可。关于词法分析器的实现,QScintilla提供了QSciLexer类,该类是⼀个抽象类,因此在创建对象之前,需要对其进行子类化。
3.⼀个好的⽂本编辑器提供的不仅仅是需要语法的高亮显示,还需要有函数参数提示和自动补全等功能。这些功能都存在于QSciAPI类中。只需要从该类创建⼀个实例,并将其应用到QSciLexer对象中即可。而其父类是一个抽象类,类名为QSciAbstractAPIs。

更多内容可参考官方文档

原文链接:https://blog.csdn.net/caoshangpa/article/details/125974273

以上是关于Qt优秀开源项目之十三:QScintilla的主要内容,如果未能解决你的问题,请参考以下文章

Qt优秀开源项目之十七:QtPromise

Qt优秀开源项目之十四:SortFilterProxyModel

Qt优秀开源项目之十四:SortFilterProxyModel

Qt优秀开源项目之十六:SQLite数据库管理系统—SQLiteStudio

WebRTC笔记之十三:Qt版PeerConnection

BetaFlight模块设计之十三:Gyro过滤任务分析