QsciScintilla在QT上的使用
阅读原文时间:2021年04月24日阅读:1

QsciScintilla下载地址

地址:https://riverbankcomputing.com/software/qscintilla/download

下载后打开里面的工程文件,然后分别在debug和release下运行生成相应的dll和lib

生成好后加入你的代码中

CONFIG(debug, debug|release){
LIBS += "$$PWD/Lib/64bit/qscintilla2_qt5d.lib"
} else {
LIBS += "$$PWD/Lib/64bit/qscintilla2_qt5.lib"
}

然后就是实现代码

#ifndef SYSEDITOR_H
#define SYSEDITOR_H

#include <QtScintilla/Qsci/qsciscintilla.h>
#include <QtScintilla/Qsci/qsciapis.h>
#include <QtScintilla/Qsci/qscilexercpp.h>
#include <QtScintilla/Qsci/qscilexerpython.h>
class SysEditor : public QsciScintilla
{
    Q_OBJECT

public:
    SysEditor();
    ~SysEditor();

};

#endif // SYSEDITOR_H


#include "SysEditor.h"

SysEditor::SysEditor()
{
    //
    QsciLexer *textLexer;
    textLexer = new QsciLexerCPP;
    textLexer->setColor(QColor("#008000"),QsciLexerCPP::Comment);
    textLexer->setColor(QColor("#ff0000"),QsciLexerCPP::Number);
    textLexer->setColor(QColor("#008000"),QsciLexerCPP::CommentLineDoc);
    textLexer->setColor(QColor("#008000"),QsciLexerCPP::DoubleQuotedString);
    textLexer->setColor(QColor("#ff00ff"),QsciLexerCPP::SingleQuotedString);
    textLexer->setColor(QColor("#0055ff"),QsciLexerCPP::Keyword);
    textLexer->setColor(QColor("#0055ff"),QsciLexerCPP::PreProcessor);


    this->setLexer(textLexer);//给QsciScintilla设置词法分析器

    //代码提示
    QsciAPIs *apis = new QsciAPIs(textLexer);
    apis->prepare();

    QFont font1("Courier", 10, QFont::Normal);
//    this->setFont(font1);

    this->setAutoCompletionSource(QsciScintilla::AcsAll);   //设置源,自动补全所有地方出现的
    this->setAutoCompletionCaseSensitivity(true);   //设置自动补全大小写敏感
    this->setAutoCompletionThreshold(2);    //设置每输入2个字符就会出现自动补全的提示

    //设置自动缩进
    this->setAutoIndent(true);

    //Enables or disables, according to enable, this display of indentation guides.
    this->setIndentationGuides(true);

    //current line color
    this->setCaretWidth(2);//光标宽度,0表示不显示光标
    this->setCaretForegroundColor(QColor("darkCyan"));  //光标颜色
    this->setCaretLineVisible(true); //是否高亮显示光标所在行
    this->setCaretLineBackgroundColor(Qt::lightGray);//光标所在行背景颜色

    //selection color
    this->setSelectionBackgroundColor(Qt::black);//选中文本背景色
    this->setSelectionForegroundColor(Qt::white);//选中文本前景色

    //It is ignored if an indicator is being used. The default is blue.
    this->setUnmatchedBraceForegroundColor(Qt::blue);


    this->setBraceMatching(QsciScintilla::SloppyBraceMatch);

    //设置左侧行号栏宽度等
    QFont font("Courier", 10, QFont::Normal);
    QFontMetrics fontmetrics = QFontMetrics(font);
    this->setMarginWidth(0, fontmetrics.width("000"));
    this->setMarginLineNumbers(0, true);
    this->setBraceMatching(QsciScintilla::SloppyBraceMatch);//括号匹配
    this->setTabWidth(4);

    QFont margin_font;
    margin_font.setFamily("SimSun");
    margin_font.setPointSize(11);//边栏字体设置px我这里显示不出行号,不知道是怎么回事
    this->setMarginsFont(margin_font);//设置页边字体
    this->setMarginType(0,QsciScintilla::NumberMargin);//设置标号为0的页边显示行号
    //editor->setMarginMarkerMask(0,QsciScintilla::Background);//页边掩码
    //editor->setMarginSensitivity(0,true);//设置是否可以显示断点,注册通知事件,当用户点击边栏时,scintilla会通知我们
    //textEdit->setMarginsBackgroundColor(QColor("#bbfaae"));
//    this->setMarginLineNumbers(0,true);//设置第0个边栏为行号边栏,True表示显示
//    this->setMarginWidth(0,15);//设置0边栏宽度
    this->setMarginsBackgroundColor(Qt::gray);//显示行号背景颜色
    this->setMarginsForegroundColor(Qt::white);

    this->setFolding(QsciScintilla::BoxedTreeFoldStyle);//折叠样式
    this->setFoldMarginColors(Qt::gray,Qt::lightGray);//折叠栏颜色

    //auto complete
    //Acs[None|All|Document|APIs]
    //禁用自动补全提示功能|所有可用的资源|当前文档中出现的名称都自动补全提示|使用QsciAPIs类加入的名称都自动补全提示
    this->setAutoCompletionSource(QsciScintilla::AcsAll);//自动补全。对于所有Ascii字符
    //editor->setAutoCompletionCaseSensitivity(false);//大小写敏感度,设置lexer可能会更改,不过貌似没啥效果
    this->setAutoCompletionThreshold(3);//设置每输入一个字符就会出现自动补全的提示
    //editor->setAutoCompletionReplaceWord(false);//是否用补全的字符串替代光标右边的字符串


}

SysEditor::~SysEditor()
{

}

最后效果

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章