一、文本環繞
如果沒有文本換行,那么一行可能會變得越來越⻓。而文本環繞則會⾃動斷行,使得所有內容都適應可見窗口。注意,如果開啟文本環繞,則環繞行不會增加行號。
1.1 環繞模式
文本環繞有多種風格,更改環繞模式的接口如下:
virtual void QsciScintilla::setWrapMode(WrapMode mode)
其中,枚舉變量WrapMode
的不同類型如下:
- WrapNone :關閉環繞模式
- WrapWord :在單詞邊界處環繞
- WrapCharacter :在字符邊界處環繞
- WrapWhitespace : 在空白符邊界環繞
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
- 如果 endFlag == WrapFlagByText
- 如果 endFlag == WrapFlagByBorder
- 如果 endFlag == WrapFlagInMargin
- 如果 startFlag == WrapFlagNone
- 如果 startFlag == WrapFlagByText
- 如果 startFlag == WrapFlagInMargin
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 符號不可見
- 如果設置為
true
:則 EOL 符號可見
三、縮進
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
:則縮進級別不可見
- 如果設置為
true
:則縮進級別可見
3.4 空格縮進
如果需要當在光標處存在空格時影響 Tab 鍵的行為,則可以使用如下接口設置:
virtual void QsciScintilla::setTabIndents(bool indent)
- 如果設置為
false
:則每當按下 Tab 鍵時,編輯器只需插入 n 個空格(也就是一個\t
字符)
- 如果設置為
true
:則編輯器會將第一個非空格字符推送到下一個縮進級別處
3.5 自動縮進
插入新行時,自動縮進會將光標推送到與前一個光標相同的縮進級別,其設置的接口如下:
virtual void QsciScintilla::setAutoIndent(bool autoindent)
- 如果設置為
false
:
- 如果設置為
true
:
注意:詞法分析器可以使用其 setAutoIndentStyle 方法來修改此行為。
四、光標
編輯器可以以不同的顏色和形狀來顯示光標。
4.1 光標前景色
光標前景色即為光標本身的顏色,可以通過如下接口設置:
virtual void setCaretForegroundColor(const QColor &col)
4.2 高亮當前行
可以通過如下接口來設置是否高亮當前行:
virtual void QsciScintilla::setCaretLineVisible(bool enable)
- 如果設置為
false
:
- 如果設置為
true
:
4.3 當前行背景色
默認情況下,高亮當前行的顏色為黃色,可以通過如下接口修改當前行的顏色:
virtual void setCaretLineBackgroundColor(const QColor &col)
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);
}
運行結果如下圖所示:

其余該系列文章如下: