QScintilla是對Scintilla的一個Qt端接口,由英國軟件公司Riverbank Computing編寫,它是一面向Qt公司Qt圖形使用者界面框架源始碼編輯器組件之一[1]。由於採用了尼爾·霍奇森(英语:Neil Hodgson)用C++寫成的Scintilla組件,QScintilla的內核和基本邏輯均由C++實現[2]。QScintilla封裝了幾乎所有的Scintilla功能;官方解釋稱「QScintilla中,除了能找到普通文本編輯器的所有功能外,QScintilla還包含了有助快速編寫代碼和爲程式除錯的功能,包括語法突顯錯誤指示符自動完成呼叫提示等等。用作選擇的頁邊可有標註,這對於除錯器想要標識中斷點和當前行很有用。渲染選項比市面上很多源代碼編輯器還要多,QScintilla支持比例字形字體粗體斜體、多重前景色彩和背景色彩、多重字體等等。」[3][4]

QScintilla
QScintilla C++ Lexer Example
QScintilla在Ubuntu上編輯C++代碼
原作者Neil Hodgson等人
開發者Riverbank Computing公司
首次发布2006年6月17日
当前版本2.14.1(2023年6月23日)
源代码库https://github.com/brCreate/QScintilla
编程语言C++Python
操作系统Microsoft WindowsMacOSLinuxAndroidiOS
平台所有Qt支持的平臺,如x86x86-64
语言6种语言
许可协议GNU GPL及PyQt商業許可證
网站https://riverbankcomputing.com/software/qscintilla/intro

從理論上來講,QScintilla是一個以C++編寫的自由開源程式庫。由於QScintilla也提供了面向Python的組件(用戶可以搭配版本5或6的PyQt使用它[5],也可以在PyPI下載使用[6]),所以QScintilla也可以被視作一Python程式庫[3]

功能

编辑

除了以上官方所述的語法突顯、錯誤指示符、自動完成和呼叫提示等以外,QScintilla由於繼承了Scintilla的實現與邏輯,它配備了以下的源代碼編輯器功能[7]

由於QScintilla的使用者界面部分基於Qt,因此QScintilla可在任何Qt所支持的平臺上運作[7],如WindowsLinuxmacOSiOSAndroid等。

目前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 ChartsSIP及QScintilla等[14]。換言之,QScintilla是隨着PyQt衍生而來的產品。

組件

编辑

範例

编辑

右側的圖片爲兩個範例運行的結果,在GNU/LinuxUbuntu上編譯/運行(用Python和C++編寫後運行的結果均爲一樣)。

 
An example using the C++ lexer in QScintilla

此處爲一個使用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_()
}

參考資料

编辑
  1. ^ QScintilla: QScintilla - a Port to Qt v5 and Qt v6 of Scintilla. brdocumentation.github.io. [2024-08-19]. 
  2. ^ brCreate, brCreate/QScintilla, 2024-08-02 [2024-08-18] 
  3. ^ 3.0 3.1 Riverbank Computing | Introduction. riverbankcomputing.com. [2024-08-18]. 
  4. ^ Riverbank Computing | Introduction. riverbankcomputing.com. [2024-08-19]. 
  5. ^ QScintilla/Python at main · brCreate/QScintilla. GitHub. [2024-08-18] (英语). 
  6. ^ Limited, Riverbank Computing, QScintilla: Python bindings for the QScintilla programmers editor widget, [2024-08-18] 
  7. ^ 7.0 7.1 7.2 QScintilla: QScintilla - a Port to Qt v5 and Qt v6 of Scintilla. brdocumentation.github.io. [2024-08-19]. 
  8. ^ Scintilla Documentation. scintilla.org. [2024-08-19]. 
  9. ^ Scintilla Documentation. scintilla.org. [2024-08-19]. 
  10. ^ QScintilla: QsciScintillaBase Class Reference. brdocumentation.github.io. [2024-08-19]. 
  11. ^ Riverbank Computing | License FAQ. riverbankcomputing.com. [2024-08-19]. 
  12. ^ Riverbank Computing | Buy PyQt. riverbankcomputing.com. [2024-08-19]. 
  13. ^ Riverbank Computing | Buy PyQt. riverbankcomputing.com. [2024-08-19]. 
  14. ^ Riverbank Computing | Buy PyQt. riverbankcomputing.com. [2024-08-19]. 
  15. ^ QScintilla: QsciAPIs Class Reference. brdocumentation.github.io. [2024-08-19]. 
  16. ^ QScintilla: QsciCommand Class Reference. brdocumentation.github.io. [2024-08-19]. 
  17. ^ QScintilla: QsciCommandSet Class Reference. brdocumentation.github.io. [2024-08-19]. 
  18. ^ QScintilla: QsciDocument Class Reference. brdocumentation.github.io. [2024-08-19]. 
  19. ^ QScintilla: QsciLexer Class Reference. brdocumentation.github.io. [2024-08-19]. 
  20. ^ QScintilla: QsciLexerAsm Class Reference. brdocumentation.github.io. [2024-08-19]. 
  21. ^ QScintilla: QsciLexerAVS Class Reference. brdocumentation.github.io. [2024-08-19]. 
  22. ^ QScintilla: QsciLexerBash Class Reference. brdocumentation.github.io. [2024-08-19]. 
  23. ^ QScintilla: QsciLexerBatch Class Reference. brdocumentation.github.io. [2024-08-19]. 
  24. ^ QScintilla: QsciLexerCMake Class Reference. brdocumentation.github.io. [2024-08-19]. 
  25. ^ QScintilla: QsciLexerCoffeeScript Class Reference. brdocumentation.github.io. [2024-08-19]. 
  26. ^ QScintilla: QsciLexerCPP Class Reference. brdocumentation.github.io. [2024-08-19]. 
  27. ^ QScintilla: QsciLexerCSharp Class Reference. brdocumentation.github.io. [2024-08-19]. 
  28. ^ QScintilla: QsciLexerCSS Class Reference. brdocumentation.github.io. [2024-08-19]. 
  29. ^ QScintilla: QsciLexerD Class Reference. brdocumentation.github.io. [2024-08-19]. 
  30. ^ QScintilla: QsciLexerDiff Class Reference. brdocumentation.github.io. [2024-08-19]. 
  31. ^ QScintilla: QsciLexerEDIFACT Class Reference. brdocumentation.github.io. [2024-08-19]. 
  32. ^ QScintilla: QsciLexerFortran Class Reference. brdocumentation.github.io. [2024-08-19]. 
  33. ^ QScintilla: QsciLexerFortran77 Class Reference. brdocumentation.github.io. [2024-08-19]. 
  34. ^ QScintilla: QsciLexerHex Class Reference. brdocumentation.github.io. [2024-08-19]. 
  35. ^ QScintilla: QsciLexerHTML Class Reference. brdocumentation.github.io. [2024-08-19]. 
  36. ^ QScintilla: QsciLexerIDL Class Reference. brdocumentation.github.io. [2024-08-19]. 
  37. ^ QScintilla: QsciLexerIntelHex Class Reference. brdocumentation.github.io. [2024-08-19]. 
  38. ^ QScintilla: QsciLexerJava Class Reference. brdocumentation.github.io. [2024-08-19]. 
  39. ^ QScintilla: QsciLexerJavaScript Class Reference. brdocumentation.github.io. [2024-08-19]. 
  40. ^ QScintilla: QsciLexerJSON Class Reference. brdocumentation.github.io. [2024-08-19]. 
  41. ^ QScintilla: QsciLexerLua Class Reference. brdocumentation.github.io. [2024-08-19]. 
  42. ^ QScintilla: QsciLexerMakefile Class Reference. brdocumentation.github.io. [2024-08-19]. 
  43. ^ QScintilla: QsciLexerMarkdown Class Reference. brdocumentation.github.io. [2024-08-19]. 
  44. ^ QScintilla: QsciLexerMASM Class Reference. brdocumentation.github.io. [2024-08-19]. 
  45. ^ QScintilla: QsciLexerMatlab Class Reference. brdocumentation.github.io. [2024-08-19]. 
  46. ^ QScintilla: QsciLexerNASM Class Reference. brdocumentation.github.io. [2024-08-19]. 
  47. ^ QScintilla: QsciLexerOctave Class Reference. brdocumentation.github.io. [2024-08-19]. 
  48. ^ QScintilla: QsciLexerPascal Class Reference. brdocumentation.github.io. [2024-08-19]. 
  49. ^ QScintilla: QsciLexerPerl Class Reference. brdocumentation.github.io. [2024-08-19]. 
  50. ^ QScintilla: QsciLexerPO Class Reference. brdocumentation.github.io. [2024-08-19]. 
  51. ^ QScintilla: QsciLexerPostScript Class Reference. brdocumentation.github.io. [2024-08-19]. 
  52. ^ QScintilla: QsciLexerPOV Class Reference. brdocumentation.github.io. [2024-08-19]. 
  53. ^ QScintilla: QsciLexerProperties Class Reference. brdocumentation.github.io. [2024-08-19]. 
  54. ^ QScintilla: QsciLexerPython Class Reference. brdocumentation.github.io. [2024-08-19]. 
  55. ^ QScintilla: QsciLexerRuby Class Reference. brdocumentation.github.io. [2024-08-19]. 
  56. ^ QScintilla: QsciLexerSpice Class Reference. brdocumentation.github.io. [2024-08-19]. 
  57. ^ QScintilla: QsciLexerSQL Class Reference. brdocumentation.github.io. [2024-08-19]. 
  58. ^ QScintilla: QsciLexerSRec Class Reference. brdocumentation.github.io. [2024-08-19]. 
  59. ^ QScintilla: QsciLexerTCL Class Reference. brdocumentation.github.io. [2024-08-19]. 
  60. ^ QScintilla: QsciLexerTekHex Class Reference. brdocumentation.github.io. [2024-08-19]. 
  61. ^ QScintilla: QsciLexerTeX Class Reference. brdocumentation.github.io. [2024-08-19]. 
  62. ^ QScintilla: QsciLexerVerilog Class Reference. brdocumentation.github.io. [2024-08-19]. 
  63. ^ QScintilla: QsciLexerVHDL Class Reference. brdocumentation.github.io. [2024-08-19]. 
  64. ^ QScintilla: QsciLexerXML Class Reference. brdocumentation.github.io. [2024-08-19]. 
  65. ^ QScintilla: QsciLexerYAML Class Reference. brdocumentation.github.io. [2024-08-19]. 
  66. ^ QScintilla: QsciLexerCPP Class Reference. brdocumentation.github.io. [2024-08-19]. 
  67. ^ QScintilla: QsciLexerPython Class Reference. brdocumentation.github.io. [2024-08-19]. 
  68. ^ QScintilla: Class Hierarchy. brdocumentation.github.io. [2024-08-19]. 
  69. ^ QScintilla/src/qscilexerjava.cpp at main · brCreate/QScintilla. GitHub. [2024-08-19] (英语). 
  70. ^ QScintilla/src/qscilexerjavascript.cpp at main · brCreate/QScintilla. GitHub. [2024-08-19] (英语). 
  71. ^ QScintilla/src/qscilexeridl.cpp at main · brCreate/QScintilla. GitHub. [2024-08-19] (英语). 
  72. ^ How do you add folding to QsciLexerCustom subclass?. Stack Overflow. [2024-08-19] (英语). 
  73. ^ QScintilla: QsciMacro Class Reference. brdocumentation.github.io. [2024-08-19]. 
  74. ^ QScintilla: QsciPrinter Class Reference. brdocumentation.github.io. [2024-08-19]. 
  75. ^ QScintilla: QsciPrinter Class Reference. brdocumentation.github.io. [2024-08-19]. 
  76. ^ QScintilla: QsciPrinter Class Reference. brdocumentation.github.io. [2024-08-19]. 
  77. ^ QScintilla: QsciPrinter Class Reference. brdocumentation.github.io. [2024-08-19]. 
  78. ^ QScintilla: QsciScintilla Class Reference. brdocumentation.github.io. [2024-08-19]. 
  79. ^ QScintilla: QsciStyle Class Reference. brdocumentation.github.io. [2024-08-19]. 
  80. ^ QScintilla: QsciStyledText Class Reference. brdocumentation.github.io. [2024-08-19].