QScintilla入門指南之基本介紹


Scintilla是一個免費、跨平台、支持語法高亮的編輯控件。它完整支持源代碼的編輯和調試,包括語法高亮、錯誤指示、自動補全(code completion)和函數提示(call tips)。能包含標記(marker)的頁邊(margin)可用於標記斷點、折疊和高亮當前行。而QScintilla是Scintilla在QT上的移植。使用該庫可以更為方便的開發Qt程序。

由於國內網站對於該庫的說明文檔比較缺少,所以本文主要參考自外網文檔QScintilla。但是該網站使用的是Python語言,而本文使用的是C++語言,如果讀者需要尋找Python語言的使用方法,可以去瀏覽該網站。除此之外,本文也參考了QScintilla庫的相關開發文檔。如有錯誤,還請指出。

一、下載和編譯

1.1 下載

官網下載地址:Riverbank Computing | Download

注意:有多個版本,而2.12及其以后的版本,不再支持Qt4和Qt5了,所以源碼中沒有QT4QT5這個目錄了。這里我下載的是2.11.3這個版本。這里我使用的QT版本是 Qt 5.14.2。下載完成后解壓,其目錄結構如下:

目錄名 用途
Qt4Qt5 編譯文件夾,生成對應的DLL文件
designer-Qt4Qt5 相關的設計師插件的編譯文件夾
example-Qt4Qt5 簡單的示例文件夾
doc 使用Doxygen生成的幫助文檔
lexers 已實現的各語法分析器
... ...

對於相關的 Qt Designer 控件的編譯,可以去瀏覽該網站:QScintilla的安裝及簡介

1.2 編譯

打開Qt4Qt5文件夾,找到qscintilla.pro,雙擊打開,構建即可。這里我使用的是MinGW 32-bitDebug方式進行構建。構建的目的就是生成我們需要的庫文件。編譯完成后,在Debug目錄下,會生成我們需要的庫文件,即qscintilla2_qt5d.dll

1.3 創建項目

為了后續章節的代碼實現,這里則不使用庫中所提供的example-Qt4Qt5/application.pro,該項目什么都沒有實現。為此,這里我們新建一個項目。

項目建好之后,將之前編譯的動態庫文件qscintilla2_qt5d.dll以及Qt4Qt5目錄下的Qsci文件夾拷貝到我們的工程目錄下:

image

然后打開.pro文件,添加如下代碼:

INCLUDEPATH += $$PWD/Qsci
LIBS += -L$$PWD -lqscintilla2_qt5d

二、類層次結構

2.1 QSciScintillaBase和QSciScintilla

最基本的類就是QSciScintillaBase,它是⽂本編輯器的基類,如下圖所示,它繼承於QAbstractScrollArea

但是 QSciScintillBase 類不是直接使⽤的類,它很低級,因此很難使⽤。QScintilla 庫提供了⼀個⾼級⼦類:QSciScintlla 。它就是⽂本編輯器類,其內有許多類似於 Qt 的 API 。 如果該類缺少所需的某些⾮常具體的功能,此時可以繼承其⽗類 QSciScintillaBase。

2.2 創建編輯器

向之前創建的項目中添加編輯器:

MainWindow.h 如下:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class QsciScintilla;

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QsciScintilla* editor;
};
#endif // MAINWINDOW_H

MainWindow.cpp 如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <Qsci/qsciscintilla.h>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    editor = new QsciScintilla(this);
    setCentralWidget(editor);
}

MainWindow::~MainWindow()
{
    delete ui;
}

編譯運行結果如下:

該編輯器本身就含有撤銷、回撤、剪切、復制、粘貼、刪除、全選操作。右鍵可以呼出編輯菜單。

按住 Ctrl 鍵,滾動鼠標滾輪,可以 放大/縮小 編輯器字體。

2.3 QSciLexer

語法高亮顯示的對象稱之為詞法分析器。創建並配置這樣的詞法分析器對象后,只需要將其應用到⽂本編輯器(QSciScintilla對象)中即可。關於詞法分析器的實現,QScintilla 提供了QSciLexer類,該類是⼀個抽象類,因此在創建對象之前,需要對其進行子類化。

2.4 QSciAPI

⼀個好的⽂本編輯器提供的不僅僅是需要語法的高亮顯示,還需要有函數參數提示和自動補全等功能。這些功能都存在於QSciAPI類中。只需要從該類創建⼀個實例,並將其應用到 QSciLexer 對象中即可。而其父類是一個抽象類,類名為QSciAbstractAPIs

三、其他類

  • QsciPrinter:繼承自QPrinter,能夠打印 Scintilla 文檔文本的類。
  • QsciCommand:內部編輯器命令,其中可能綁定了一個或兩個鍵。
  • QsciCommandSet:可能綁定了鍵的所有內部編輯器命令的集合。
  • QsciDocument:要編輯的文檔。
  • QsciStyle:封裝樣式的所有屬性。
  • QsciStyledText:一段文本的容器和用於顯示文本的樣式。

除此之外,還有大量的繼承自QsciLexer類的特定語言類,目前支持的語言有:AVS、Bash、批處理、CMake、CoffeeScript、C++、C#、IDL、Java、JavaScript、CSS、D、Diff、Fortran77、Fortran、HTML、XML、JSON、Lua、Makefile、Markdown、Matlab、Octave、Pascal、Perl、PO、PostScript、POV、Properties、Python、Ruby、Spice、SQL、TCL、TeX、Verilog、VHDL、YAML、Macro。


其余該系列文章如下:

  1. QScintilla入門指南之 編輯器設置
  2. QScintilla入門指南之 邊界欄
  3. QScintilla入門指南之 詞法分析器(正在更新...)
  4. QScintilla入門指南之 可點擊文本(正在更新...)
  5. QScintilla入門指南之 自動補全(正在更新...)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM