QScintilla入門指南之編輯器設置


一、文本環繞

如果沒有文本換行,那么一行可能會變得越來越⻓。而文本環繞則會⾃動斷行,使得所有內容都適應可見窗口。注意,如果開啟文本環繞,則環繞行不會增加行號

1.1 環繞模式

文本環繞有多種風格,更改環繞模式的接口如下:

virtual void QsciScintilla::setWrapMode(WrapMode mode)

其中,枚舉變量WrapMode的不同類型如下:

  • WrapNone :關閉環繞模式
  • WrapWord :在單詞邊界處環繞
    image
  • WrapCharacter :在字符邊界處環繞
    image
  • WrapWhitespace : 在空白符邊界環繞
    image

1.2 環繞標志可見性

文本環繞標志可通過如下接口 開啟/關閉:

void QsciScintilla::setWrapVisualFlags(WrapVisualFlag endFlag, WrapVisualFlag startFlag = WrapFlagNone, int indent = 0)

其中,枚舉變量WrapVisualFlag的不同類型如下:

  • WrapFlagNone :不顯示環繞標志
  • WrapFlagByText :在文本中環繞標志
  • WrapFlagByBorder :在邊界顯示環繞標志
  • WrapFlagInMargin :在行號區顯示環繞標志

endFlag參數和startFlag參數用來確定是否以及在何處顯示行尾和行首的標志。indent參數則用來設置換行的縮進字符數。

indent 參數只有將WrapIndentMode設置為WrapIndentFixed,才可以看到其效果,設置方法見環繞縮進模式

endFlag 和 startFlag 設置為不同參數的樣式如下:


  • 如果 endFlag == WrapFlagNone
    image
  • 如果 endFlag == WrapFlagByText
    image
  • 如果 endFlag == WrapFlagByBorder
    image
  • 如果 endFlag == WrapFlagInMargin
    image

  • 如果 startFlag == WrapFlagNone
    image
  • 如果 startFlag == WrapFlagByText
    image
  • 如果 startFlag == WrapFlagInMargin
    image

1.3 環繞縮進模式

環繞模式可以有縮進,可以通過如下接口設置:

void QsciScintilla::setWrapIndentMode(WrapIndentMode mode)

其中,枚舉變量WrapIndentMode的不同模式如下:

  • WrapIndentFixed :環繞的子行按照由setWrapVisualFlags()設置的值進行縮進
  • WrapIndentSame :環繞的子行與第一個子行相同
  • WrapIndentIndented :環繞的子行與第一個子行相同的量上再加上一個縮進級別
  • WrapIndentDeeplyIndented :環繞的子行與第一個子行相同的量上再加上兩個縮進級別

縮進的寬度可以通過如下接口設置:

virtual void QsciScintilla::setTabWidth(int width)

二、行結尾符

文本中的每一行都是以行結尾符(End of Line, EOF)來結尾。在⼤多數⽂本編輯器⾥,此字符不可見。但是,如果需要,可以顯示它。注意,EOL 字符對於 Linux、Windows 和 Mac 等不同的操作系統其內容是不⼀樣的:

  • Windows: \r\n
  • Unix/Linux: \n
  • Mac: \r

2.1 EOL模式

EOL模式可以通過如下接口設置:

virtual void QsciScintilla::setEolMode(EolMode mode)

其中,對於不同系統枚舉變量EolMode的設置方法如下:

editor->setEolMode(QsciScintilla::EolWindows);
editor->setEolMode(QsciScintilla::EolUnix);
editor->setEolMode(QsciScintilla::EolWMac);

2.2 EOL可見性

EOL符號的可見性可以通過如下接口設置:

virtual void QsciScintilla::setEolVisibility(bool visible)
  • 如果設置為false:則 EOL 符號不可見
    image
  • 如果設置為true:則 EOL 符號可見
    image

三、縮進

3.1 縮進字符

默認的縮進字符是" ",即空格。可以通過如下函數設置是否使用\t字符,即 Tab:

virtual void QsciScintilla::setIndentationsUseTabs(bool tabs)

如果設置為false,則采用空格縮進;如果設置為true,則采用 Tab 縮進。

3.2 縮進寬度

可以通過如下接口設置縮進的寬度:

virtual void QsciScintilla::setTabWidth	(int width)

使用 Tab 鍵完成縮進時,此參數定義了 Tab 字符的寬度,即為空格的倍數。

3.3 縮進提示

QScintilla 可以顯示虛線垂直線以用來指示該行的縮進級別,其接口為:

virtual void QsciScintilla::setIndentationGuides(bool enable)
  • 如果設置為false:則縮進級別不可見
    image
  • 如果設置為true:則縮進級別可見
    image

3.4 空格縮進

如果需要當在光標處存在空格時影響 Tab 鍵的行為,則可以使用如下接口設置:

virtual void QsciScintilla::setTabIndents(bool indent)
  • 如果設置為false:則每當按下 Tab 鍵時,編輯器只需插入 n 個空格(也就是一個\t字符)
    image
  • 如果設置為true:則編輯器會將第一個非空格字符推送到下一個縮進級別處
    image

3.5 自動縮進

插入新行時,自動縮進會將光標推送到與前一個光標相同的縮進級別,其設置的接口如下:

virtual void QsciScintilla::setAutoIndent(bool autoindent)
  • 如果設置為false
    image
  • 如果設置為true
    image

注意:詞法分析器可以使用其 setAutoIndentStyle 方法來修改此行為。

四、光標

編輯器可以以不同的顏色和形狀來顯示光標。

4.1 光標前景色

光標前景色即為光標本身的顏色,可以通過如下接口設置:

virtual void setCaretForegroundColor(const QColor &col)

image

4.2 高亮當前行

可以通過如下接口來設置是否高亮當前行:

virtual void QsciScintilla::setCaretLineVisible(bool enable)
  • 如果設置為false
    image
  • 如果設置為true
    image

4.3 當前行背景色

默認情況下,高亮當前行的顏色為黃色,可以通過如下接口修改當前行的顏色:

virtual void setCaretLineBackgroundColor(const QColor &col)

image

4.4 光標寬度

可以通過如下接口來設置光標寬度,其以像素為單位。注意:如果設置為0,則光標不可見!

virtual void setCaretWidth(int width)

五、代碼實例

mainwindow.cpp中添加如下代碼:

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

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

    // 編輯器設置
    // ----------------------------------------
    // 設置Tab鍵為4個空格
    editor->setTabWidth(4);
    // 開啟自動縮進
    editor->setAutoIndent(true);
    // 高亮當前行
    editor->setCaretLineVisible(true);
    // 設置當前行顏色
    editor->setCaretLineBackgroundColor(QColor("#E8E8FF"));
    // 編輯器放大
    editor->zoomIn(8);
}

運行結果如下圖所示:


其余該系列文章如下:

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


免責聲明!

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



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