使用QPlainTextEdit完成一个代码编辑器
关键词:Qt: QPlainTextEdit、CommentHighlighter、QCompleter
一个代码编辑器基本要素如下:
- 文本编辑
- 显示行号
- 高亮编辑去
- 代码自动补全
文本编辑
文本编辑肯定是一个编辑器的最基本的要素。在Qt中,有QTextEdit和QPlainTextEdit都是可以进行文本编辑的控件。但是,QPlainTextEdit控件对纯文本的支持进行了优化,并且对大文本支持比QTextEdit好,性能更优秀,因此,这里选择QPlainTextEdit作为代码编辑器的底层文本编辑组件。
显示行号
显示行号是一个编辑器比较好用的一个有力支撑功能。但是QPlainTextEdit控件本身是不支持行号显示的,但是幸好Qt的example给出了一个显示行号的例子CodeEditor,并且更好的消息是CodeEditor也是用QPlainTextEdit实现的。我这里就直接拿来用了。
声明
Qt的显示行号例子CodeEditor声明如下:
//![codeeditordefinition]
class CodeEditor : public QPlainTextEdit
{
Q_OBJECT
public:
CodeEditor(QWidget *parent = nullptr);
void lineNumberAreaPaintEvent(QPaintEvent *event);
int lineNumberAreaWidth();
protected:
void resizeEvent(QResizeEvent *event) override;
private slots:
void updateLineNumberAreaWidth(int newBlockCount);
void highlightCurrentLine();
void updateLineNumberArea(const QRect &rect, int dy);
private: