开发笔记

  • 首页
  • 工具箱
三味线的博客
  1. 首页
  2. Qt
  3. 正文

QScintilla使用(代码编辑器)

2021-12-21 2609点热度 12人点赞 0条评论

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);
}
标签: QScintilla Qt
最后更新:2021-12-21

三味线

不吃咸鱼的喵

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

Captcha Code

COPYRIGHT © 2022 voidcat.cn. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

蜀ICP备18010095号-1