QScintilla是一个支持高亮、自动补全、页边(显示行号、断点)等功能的代码编辑控件
下载:https://riverbankcomputing.com/software/qscintilla/download
需要注意它的不同版本依赖不同的Qt版本,我使用的是Qt5.6.3 + QScintilla-2.11.6
1. 下载完成后,用Qt Creator打开./Qt4Qt5/qscintilla.pro 编译出debug或release库
2. 建立自己的工程,在pro中添加头文件和库依赖
INCLUDEPATH += {YOUR PATH}/QScintilla-2.11.6/Qt4Qt5
win32:CONFIG(release, debug|release): LIBS += -L{YOUR PATH}/QScintilla-2.11.6/build-qscintilla-Qt_5_6_3-Debug/release/ -lqscintilla2_qt5
else:win32:CONFIG(debug, debug|release): LIBS += -L{YOUR PATH}/QScintilla-2.11.6/build-qscintilla-Qt_5_6_3-Debug/debug/ -lqscintilla2_qt5d
else:unix: LIBS += -L{YOUR PATH}/QScintilla-2.11.6/build-qscintilla-Qt_5_6_3-Debug/ -lqscintilla2_qt5
3. 以下为测试代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <Qsci/qscilexerjavascript.h>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
};
class QsciLexerJSTest : public QsciLexerJavaScript
{
public:
const char *keywords(int set) const;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include <Qsci/qsciscintilla.h>
#include <Qsci/qsciapis.h>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QsciScintilla *editor=new QsciScintilla(this);
// 设置解析器
// QsciLexerJavaScript *textLexer = new QsciLexerJavaScript;
QsciLexerJSTest *textLexer = new QsciLexerJSTest;
editor->setLexer(textLexer);
// 行号提示
editor->setMarginType(0, QsciScintilla::NumberMargin);
editor->setMarginLineNumbers(0, true);
editor->setMarginWidth(0, 15);
// 字体
editor->setFont(QFont("Courier New"));
// 编码
editor->SendScintilla(QsciScintilla::SCI_SETCODEPAGE, QsciScintilla::SC_CP_UTF8);
editor->setAutoIndent(true);
editor->setCaretLineVisible(false);
editor->setIndentationGuides(true);
// 括号
editor->setUnmatchedBraceBackgroundColor(Qt::blue);
editor->setBraceMatching(QsciScintilla::SloppyBraceMatch);
// 自动补全提示
QsciAPIs *apis = new QsciAPIs(textLexer);
apis->add(QString("import"));
apis->add(QString("importPackage"));
// 也可通过文件设置,一个单词一行
// if (!apis->load(QString("F:/MyProjects/qscitest/comp_word.txt"))) {
// qDebug()<<"faild to load";
// }
apis->prepare();
editor->setAutoCompletionSource(QsciScintilla::AcsAll);
editor->setAutoCompletionCaseSensitivity(true);
editor->setAutoCompletionThreshold(1);
textLexer->setColor(QColor(Qt::blue),QsciLexerJavaScript::KeywordSet2);
this->setCentralWidget(editor);
this->resize(800, 600);
}
MainWindow::~MainWindow()
{
}
// 自定义关键字,可设置字体、颜色等(QsciLexerJavaScript::KeywordSet2)
const char *QsciLexerJSTest::keywords(int set) const
{
if(set == 2) {
return "self moment";
}
return QsciLexerJavaScript::keywords(set);
}
评论区