QScintilla
原作者 | Neil Hodgson等人 |
---|---|
开发者 | Riverbank Computing公司 |
首次发布 | 2006年6月17日 |
当前版本 | 2.14.1(2023年6月23日) |
源代码库 | https://github.com/brCreate/QScintilla |
编程语言 | C++、Python |
操作系统 | Microsoft Windows、MacOS、Linux、Android、iOS等 |
平台 | 所有Qt支持的平台,如x86及x86-64等 |
语言 | 6种语言 |
许可协议 | GNU GPL及PyQt商业许可证 |
网站 | https://riverbankcomputing.com/software/qscintilla/intro |
QScintilla是对Scintilla的一个Qt端接口,由英国软件公司Riverbank Computing编写,它是一面向Qt公司的Qt图形用户界面框架的源始码编辑器组件之一[1]。由于采用了尼尔·霍奇森(英语:Neil Hodgson)用C++写成的Scintilla组件,QScintilla的内核和基本逻辑均由C++实现[2]。QScintilla封装了几乎所有的Scintilla功能;官方解释称“QScintilla中,除了能找到普通文本编辑器的所有功能外,QScintilla还包含了有助快速编写代码和为程序调试的功能,包括语法高亮、错误指示符、自动完成和调用提示等等。用作选择的页边可有标注,这对于调试器想要标识中断点和当前行很有用。渲染选项比市面上很多源代码编辑器还要多,QScintilla支持比例字形字体、粗体和斜体、多重前景色彩和背景色彩、多重字体等等。”[3][4]
从理论上来讲,QScintilla是一个以C++编写的自由开源程序库。由于QScintilla也提供了面向Python的组件(用户可以搭配版本5或6的PyQt使用它[5],也可以在PyPI上下载使用[6]),所以QScintilla也可以被视作一Python程序库[3]。
功能
[编辑]除了以上官方所述的语法高亮、错误指示符、自动完成和调用提示等以外,QScintilla由于继承了Scintilla的实现与逻辑,它配备了以下的源代码编辑器功能[7]:
由于QScintilla的用户界面部分基于Qt,因此QScintilla可在任何Qt所支持的平台上运作[7],如Windows、Linux、macOS、iOS和Android等。
目前QScintilla的底层逻辑基于Scintilla 3.10.1版本[7],因此QScintilla可能缺失部分或全部Scintilla在其3.10.1后的版本所实现的功能(如SCI_GETSTYLEDTEXTFULL
等,不在QsciScintillaBase
类的匿名枚举中)[8][9][10]。
许可证与法律地位
[编辑]与Scintilla不同,QScintilla使用的是与PyQt(和早期Qt)相同的许可证标准。行双轨许可证:GNU GPL第三版本和PyQt自己的商业许可(目前PyQt和QScintilla均不提供LGPL及其他任何的自由软件许可证,因为官方声称不确定这样做能否维持其售卖商业许可证的收入[11])。开发自由软件者、开源软件以及任何非牟利的软件可使用免费的许可证,但任何牟利性的、商业性的软件都必须购买PyQt商业许可证才合法[12]。
如果买家买了PyQt商业许可证,那么其许可证就是终身有效的,用户可以自由地下载及商业地使用当前和及后版本的PyQt和QScintilla等。但该许可证并不包含购买时间前所发布的版本。PyQt的商业许可证并不包含Qt的商业许可证;用户需另外购买。[13]
Riverbank Computing公司不单独出售QScintilla的许可证;相反,商业用户必须购买所有的Riverbank Computing产品,包括PyQt、PyQt 3D
、PyQt Charts
、SIP
及QScintilla等[14]。换言之,QScintilla是随着PyQt派生而来的产品。
示例
[编辑]右侧的图片为两个示例运行的结果,在GNU/Linux的Ubuntu上编译/运行(用Python和C++编写后运行的结果均为一样)。
此处为一个使用Python编写的示例:
#!/usr/bin/python3
# -*- encoding: utf8 -*-
from PyQt5.QtWidgets import QApplication, QMainWindow
# 從PyQt的QtWidgets子模組中導入依賴類,使用版本爲5
from PyQt5.Qsci import QsciLexerCPP, QsciScintilla
# 從QScintilla導入編輯器及C++詞法分析器類,使用PyQt版本爲5
# 需事先透過「pip install QScintilla」下載
import sys
# 導入sys模塊
# 運行主代碼
if __name__ == "__main__":
app: QApplication = QApplication(sys.argv)
# 建立一個QApplication實例
mw: QMainWindow = QMainWindow()
# 建立一個QMainWindow實例
ed: QsciScintilla = QsciScintilla(mw)
# 建立編輯器實例,父類爲mw
lex: QsciLexerCPP = QsciLexerCPP(ed)
# 建立詞法分析器實例,父類爲ed
ed.setLexer(lex)
# 設定分析器
ed.setMarginLineNumbers(0, True)
# 設定行號
ed.setMarginWidth(0, "000000")
# 設定顯示行號的頁邊界所佔寬度爲六個字符
mw.setCentralWidget(ed)
# 常規操作
mw.show()
# 顯示mw
sys.exit(app.exec())
# 常規操作,也可調用app.exec_()
以下为C++版本:
#include <QApplication>
#include <QMainWindow>
// 從PyQt的QtWidgets子模組中導入依賴類,使用版本自由
#include <Qsci/qscilexercpp.h>
#include <Qsci/qsciscintilla.h>
// 從QScintilla導入編輯器及C++詞法分析器類,使用Qt版本自由
// 需事先透過「Qt Online Installer」下載、編譯、封裝Qt
// 然後再從GitHub或Riverbank的官網上下載QScintilla,解壓壓縮包、
// 編譯、下載。
// 需要用到CMake/QMake。
// 運行主代碼
int main(int argc, char *argv[]) {
QApplication app(argc, argv)
// 建立一個QApplication實例
QMainWindow mw()
// 建立一個QMainWindow實例
QsciScintilla *ed = new QsciScintilla(&mw)
// 建立編輯器實例,父類爲mw指針地址
QsciLexerCPP *lex = new QsciLexerCPP(ed)
// 建立詞法分析器實例,父類爲ed
ed->setLexer(lex)
// 設定分析器
ed->setMarginLineNumbers(0, true)
// 設定行號
ed->setMarginWidth(0, "000000")
// 設定顯示行號的頁邊界所佔寬度爲六個字符
mw.setCentralWidget(ed)
// 常規操作
mw.show()
// 顯示mw
return app.exec()
// 常規操作,也可調用app.exec_()
}
参考资料
[编辑]- ^ QScintilla: QScintilla - a Port to Qt v5 and Qt v6 of Scintilla. brdocumentation.github.io. [2024-08-19].
- ^ brCreate, brCreate/QScintilla, 2024-08-02 [2024-08-18]
- ^ 3.0 3.1 Riverbank Computing | Introduction. riverbankcomputing.com. [2024-08-18].
- ^ Riverbank Computing | Introduction. riverbankcomputing.com. [2024-08-19].
- ^ QScintilla/Python at main · brCreate/QScintilla. GitHub. [2024-08-18] (英语).
- ^ Limited, Riverbank Computing, QScintilla: Python bindings for the QScintilla programmers editor widget, [2024-08-18]
- ^ 7.0 7.1 7.2 QScintilla: QScintilla - a Port to Qt v5 and Qt v6 of Scintilla. brdocumentation.github.io. [2024-08-19].
- ^ Scintilla Documentation. scintilla.org. [2024-08-19].
- ^ Scintilla Documentation. scintilla.org. [2024-08-19].
- ^ QScintilla: QsciScintillaBase Class Reference. brdocumentation.github.io. [2024-08-19].
- ^ Riverbank Computing | License FAQ. riverbankcomputing.com. [2024-08-19].
- ^ Riverbank Computing | Buy PyQt. riverbankcomputing.com. [2024-08-19].
- ^ Riverbank Computing | Buy PyQt. riverbankcomputing.com. [2024-08-19].
- ^ Riverbank Computing | Buy PyQt. riverbankcomputing.com. [2024-08-19].